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:
- Compararea element cu element cu sortare. Sortăm ambele colecții și apoi comparăm elementele după index.
- 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.
- Utilizarea
HashSet. Transformăm una dintre colecții într-unHashSetpentru 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
}