Middle
Ko nepieciešams izdarīt, lai salīdzinātu divu kolekciju saturu?
sobes.tech AI
Atbilde no AI
Ir vairākas pieejas:
- Elementu salīdzināšana ar kārtošanu. Kārto abas kolekcijas un pēc tam salīdzina elementus pēc indeksa.
- LINQ izmantošana salīdzināšanai.
SequenceEqual: salīdzina abu kolekciju saturu elementu pēc elementa, ņemot vērā kārtību.Intersect: atrod kopīgos elementus abās kolekcijās.Except: atrod elementus, kas ir vienā kolekcijā, bet trūkst otrā.Union: apvieno abu kolekciju unikālos elementus.
- HashSet izmantošana. Pārvērš vienu no kolekcijām par
HashSetātrai meklēšanai un salīdzināšanai.
Izvēloties metodi, jāņem vērā:
- Elementu kārtība: Vai kārtība ir svarīga salīdzināšanā?
- Veiktspēja: Lielām kolekcijām efektīvākas var būt ar hash tabulām vai kārtošanu saistītās metodes.
- Dublikāti: Kā rīkoties ar atkārtotiem elementiem?
LINQ SequenceEqual piemērs:
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 };
// Salīdzina saturu, ņemot vērā kārtību
bool areEqualOrdered = list1.SequenceEqual(list2); // true
bool areEqualOrdered2 = list1.SequenceEqual(list3); // false
LINQ Intersect piemērs:
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 };
// Atrod kopīgos elementus
IEnumerable<int> commonElements = list1.Intersect(list2); // { 3, 4 }
HashSet izmantošanas piemērs:
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 };
// Izveido HashSet no vienas kolekcijas, lai ātri meklētu
HashSet<int> set1 = new HashSet<int>(list1);
// Pārbauda, vai visi otrās kolekcijas elementi ir pirmās kolekcijas daļa
bool containsAll = list2.All(item => set1.Contains(item)); // true
// Papildu pārbaude, vai abas kolekcijas satur vienādu unikālo elementu skaitu
if (containsAll && set1.Count == list2.Distinct().Count())
{
// Kolekcijas satur vienus un tos pašus elementus, neņemot vērā kārtību
}