Middle
Ką reikia padaryti, kad palygintumėte dviejų kolekcijų turinį?
sobes.tech AI
Atsakymas iš AI
Yra keletas požiūrių:
- Elementų palyginimas su rūšiavimu. Rūšiuojame abi kolekcijas ir tada lyginame elementus pagal indeksą.
- LINQ naudojimas palyginimui.
SequenceEqual: lygina dviejų kolekcijų turinį elementais, atsižvelgiant į tvarką.Intersect: randa bendrus elementus abiejose kolekcijose.Except: randa elementus, esančius vienoje kolekcijoje, bet trūksta kitoje.Union: sujungia unikalius abiejų kolekcijų elementus.
- HashSet naudojimas. Paverčiame vieną iš kolekcijų į
HashSetgreitam paieškai ir palyginimui.
Renkantis metodą, reikia atsižvelgti į:
- Elementų tvarką: Ar tvarka svarbi palyginant?
- Veikimą: Didelėms kolekcijoms efektyvesni gali būti metodai su hash lentelėmis arba rūšiavimu.
- Dublikatus: Kaip tvarkyti pasikartojančius elementus?
LINQ SequenceEqual pavyzdys:
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 };
// Palygina turinį atsižvelgiant į tvarką
bool areEqualOrdered = list1.SequenceEqual(list2); // true
bool areEqualOrdered2 = list1.SequenceEqual(list3); // false
LINQ Intersect pavyzdys:
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 };
// Randa bendrus elementus
IEnumerable<int> commonElements = list1.Intersect(list2); // { 3, 4 }
HashSet naudojimo pavyzdys:
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 };
// Sukuriame HashSet iš vienos kolekcijos greitam paieškai
HashSet<int> set1 = new HashSet<int>(list1);
// Patikriname, ar visi antros kolekcijos elementai yra pirmojoje
bool containsAll = list2.All(item => set1.Contains(item)); // true
// Papildomas patikrinimas, ar abi kolekcijos turi tą patį unikalių elementų skaičių
if (containsAll && set1.Count == list2.Distinct().Count())
{
// Kolekcijos turi tą patį elementų rinkinį, neatsižvelgiant į tvarką
}