Sobes.tech
Middle

Ce trebuie făcut pentru a compara conținutul a două colecții?

sobes.tech AI

Răspuns de la AI

Există mai multe abordări:

  1. Compararea element cu element cu sortare. Sortăm ambele colecții și apoi comparăm elementele după index.
  2. Compararea folosind LINQ.
    • SequenceEqual: Compară conținutul a două colecții element cu element, ținând cont de ordine.
    • Intersect: Găsește elementele comune în ambele colecții.
    • Except: Găsește elementele care sunt într-o colecție, dar lipsesc în cealaltă.
    • Union: Combină elementele unice ale ambelor colecții.
  3. Utilizarea HashSet. Transformăm una dintre colecții într-un HashSet pentru căutări și comparații rapide.

La alegerea metodei, trebuie să țineți cont de:

  • Ordinea elementelor: Este importantă ordinea elementelor în comparație?
  • Performanța: Pentru colecții mari, metodele care utilizează tabele hash sau sortare pot fi mai eficiente.
  • Duble: Cum se gestionează elementele duplicate?

Exemplu de utilizare 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 };

// Compară conținutul ținând cont de ordine
bool suntEgaleOrdonate = list1.SequenceEqual(list2); // true
bool suntEgaleOrdonate2 = list1.SequenceEqual(list3); // false

Exemplu de utilizare 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 };

// Găsește elementele comune
IEnumerable<int> elementeComune = list1.Intersect(list2); // { 3, 4 }

Exemplu de utilizare 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 };

// Crează un HashSet dintr-o colecție pentru căutare rapidă
HashSet<int> set1 = new HashSet<int>(list1);

// Verifică dacă toate elementele celei de-a doua colecții sunt în prima
bool conțineTot = list2.All(item => set1.Contains(item)); // true

// Verificare suplimentară dacă ambele colecții au același număr de elemente unice
if (conțineTot && set1.Count == list2.Distinct().Count())
{
    // Colecțiile conțin aceleași elemente fără a ține cont de ordine
}