Middle
Ինչ պետք է անել, որպեսզի համեմատել երկու հավաքածուների պարունակությունը?
sobes.tech AI
Պատասխան AI-ից
Կան մի քանի մոտեցումներ.
- Էլեմենտային համեմատություն դասավորությամբ։ Դասավորենք երկու հավաքածուները և համեմատենք տարրերը ըստ ինդեքսի։
- LINQ օգտագործմամբ համեմատություն։
SequenceEqual: համեմատում է երկու հավաքածուների պարունակությունը տարրերով, հաշվի առնելով կարգը։Intersect: գտնում է ընդհանուր տարրերը երկու հավաքածուներում։Except: գտնում է այն տարրերը, որոնք առկա են մեկ հավաքածուում, բայց բացակայում մյուսում։Union: միավորում է երկու հավաքածուների եզակի տարրերը։
- HashSet օգտագործում։ Մեկ հավաքածուից վերածում ենք
HashSet՝ արագ որոնում և համեմատություն իրականացնելու համար։
Ընտրելիս պետք է հաշվի առնել.
- Տարածքային կարգը: Կարևո՞ր է տարրերի կարգը համեմատության ժամանակ։
- Արդյունավետություն: Մեծ հավաքածուների համար ավելի արդյունավետ կարող են լինել hash-թվացուցակների կամ դասավորության մեթոդները։
- Կրկնօրինակներ: Ինչպես վարվել կրկնվող տարրերով։
Օրինակ 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 };
// Համեմատում է պարունակությունը՝ հաշվի առնելով կարգը
bool areEqualOrdered = list1.SequenceEqual(list2); // true
bool areEqualOrdered2 = list1.SequenceEqual(list3); // false
Օրինակ 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 };
// Գտնում է ընդհանուր տարրերը
IEnumerable<int> commonElements = list1.Intersect(list2); // { 3, 4 }
Օրինակ 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 };
// Ստեղծում ենք HashSet մի հավաքածուից՝ արագ որոնում ապահովելու համար
HashSet<int> set1 = new HashSet<int>(list1);
// Ստուգում ենք, արդյոք բոլոր տարրերը երկրորդ հավաքածուում առաջինում կան
bool containsAll = list2.All(item => set1.Contains(item)); // true
// Ավելին՝ ստուգում ենք, թե երկու հավաքածուները պարունակում են նույնքան եզակի տարր
if (containsAll && set1.Count == list2.Distinct().Count())
{
// Հավաքածուները պարունակում են նույն տարրերը՝ առանց կարգի հաշվի առնելու
}