Sobes.tech
Middle

Ką reikia padaryti, kad palygintumėte dviejų kolekcijų turinį?

sobes.tech AI

Atsakymas iš AI

Yra keletas požiūrių:

  1. Elementų palyginimas su rūšiavimu. Rūšiuojame abi kolekcijas ir tada lyginame elementus pagal indeksą.
  2. 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.
  3. HashSet naudojimas. Paverčiame vieną iš kolekcijų į HashSet greitam 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ą
}