Middle
Чӣ бояд кард, то мӯҳтавои ду коллексияро муқоиса кард?
sobes.tech AI
Ҷавоб аз AI
Кўплаб турли ёндашувлар мавжуд:
- Тузилмаларни сортлаш ва таққослаш. Ҳар икки тўпламни сортлаб, кейин элементларни индекс бўйича таққослаймиз.
- LINQ ёрдамида таққослаш.
SequenceEqual: икки тўпламнинг мазмунини элементлар бўйича, тартибни ҳисобга олган ҳолда, таққослайди.Intersect: икки тўпламда умумий бўлган элементларни топади.Except: бир тўпламда бор, бошқасида йўқ бўлган элементларни топади.Union: икки тўпламнинг уникал элементларини бирлаштиради.
- 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())
{
// Тўпламлар бир хил элементларни ўз ичига олади, тартибни ҳисобга олмай
}