Sobes.tech
Middle

Чӣ бояд кард, то мӯҳтавои ду коллексияро муқоиса кард?

sobes.tech AI

Ҷавоб аз AI

Кўплаб турли ёндашувлар мавжуд:

  1. Тузилмаларни сортлаш ва таққослаш. Ҳар икки тўпламни сортлаб, кейин элементларни индекс бўйича таққослаймиз.
  2. LINQ ёрдамида таққослаш.
    • SequenceEqual: икки тўпламнинг мазмунини элементлар бўйича, тартибни ҳисобга олган ҳолда, таққослайди.
    • Intersect: икки тўпламда умумий бўлган элементларни топади.
    • Except: бир тўпламда бор, бошқасида йўқ бўлган элементларни топади.
    • Union: икки тўпламнинг уникал элементларини бирлаштиради.
  3. HashSet (HashSet)дан фойдаланиш. Бир тўпламни HashSetга айлантириб, тезкор қидириш ва таққослаш амалларини бажарамиз.

Тўғри усулни танлашда қуйидаги жиҳатлар ҳисобга олинсин:

  • Элементлар тартиби: Тартиб муҳимми?
  • Самарадорлик: Катта тўпламлар учун хеш-таблицалар ёки сортлашдан фойдаланган усуллар самаралироқ бўлиши мумкин.
  • Нусхалар: Нусхалар билан қандай муомала қилиш?

LINQ SequenceEqualдан фойдаланиш намунаси:

using System.Collections.Generic;
using System.Linq;

// ...

List<int> list1 = new List<int> { 1, 2, 3 };
List<int> list2 = new List<int> { 1, 2, 3 };
List<int> list3 = new List<int> { 3, 2, 1 };

// Тартибни ҳисобга олган ҳолда мазмунни таққослайди
bool areEqualOrdered = list1.SequenceEqual(list2); // true
bool areEqualOrdered2 = list1.SequenceEqual(list3); // false

LINQ Intersectдан фойдаланиш намунаси:

using System.Collections.Generic;
using System.Linq;

// ...

List<int> list1 = new List<int> { 1, 2, 3, 4 };
List<int> list2 = new List<int> { 3, 4, 5, 6 };

// Умумий элементларни топади
IEnumerable<int> commonElements = list1.Intersect(list2); // { 3, 4 }

HashSetдан фойдаланиш намунаси:

using System.Collections.Generic;
using System.Linq;

// ...

List<int> list1 = new List<int> { 1, 2, 3 };
List<int> list2 = new List<int> { 3, 1, 2 };

// Бир тўпламдан `HashSet` яратиб, тезкор қидиришни таъминлаймиз
HashSet<int> set1 = new HashSet<int>(list1);

// Иккинчи тўпламдаги барча элементлар биринчи тўпламда бор-йўқлигини текшириш
bool containsAll = list2.All(item => set1.Contains(item)); // true

// Қўшимча текширув, икки тўпламда бир хил уникал элементлар сони бор-йўқлигини аниқлаш
if (containsAll && set1.Count == list2.Distinct().Count())
{
    // Тўпламлар бир хил элементларни ўз ичига олади, тартибни ҳисобга олмай
}