Middle
Co je třeba udělat, aby bylo možné porovnat obsah dvou kolekcí?
sobes.tech AI
Odpověď od AI
Existuje několik přístupů:
- Porovnání po elementech se seřazením. Obě kolekce se seřadí a poté se porovnají podle indexu.
- Porovnání pomocí LINQ.
SequenceEqual: Porovnává obsah dvou kolekcí element po elementu, přičemž bere v úvahu pořadí.Intersect: Najde společné prvky v obou kolekcích.Except: Najde prvky, které jsou v jedné kolekci, ale chybí v druhé.Union: Spojí jedinečné prvky obou kolekcí.
- Použití
HashSet. Převádíme jednu z kolekcí naHashSetpro rychlé vyhledávání a porovnávání.
Při výběru metody je třeba vzít v úvahu:
- Pořadí prvků: Je důležité pořadí prvků při porovnávání?
- Výkon: Pro velké kolekce mohou být efektivnější metody s použitím hash tabulek nebo třídění.
- Duplikáty: Jak zacházet s duplicitními prvky?
Příklad použití 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 };
// Porovnává obsah s ohledem na pořadí
bool jsouRovnePoPoradí = list1.SequenceEqual(list2); // true
bool jsouRovnePoPoradí2 = list1.SequenceEqual(list3); // false
Příklad použití 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 };
// Najde společné prvky
IEnumerable<int> spolecnePrvky = list1.Intersect(list2); // { 3, 4 }
Příklad použití 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 };
// Vytvoříme `HashSet` z kolekce pro rychlé vyhledávání
HashSet<int> set1 = new HashSet<int>(list1);
// Zkontrolujeme, zda všechny prvky druhé kolekce jsou v první
bool obsahujeVsechno = list2.All(item => set1.Contains(item)); // true
// Další kontrola, zda obě kolekce mají stejný počet unikátních prvků
if (obsahujeVsechno && set1.Count == list2.Distinct().Count())
{
// Kolekce obsahují stejné prvky bez ohledu na pořadí
}