Sobes.tech
Middle

Ինչ պետք է անել, որպեսզի համեմատել երկու հավաքածուների պարունակությունը?

sobes.tech AI

Պատասխան AI-ից

Կան մի քանի մոտեցումներ.

  1. Էլեմենտային համեմատություն դասավորությամբ։ Դասավորենք երկու հավաքածուները և համեմատենք տարրերը ըստ ինդեքսի։
  2. LINQ օգտագործմամբ համեմատություն։
    • SequenceEqual: համեմատում է երկու հավաքածուների պարունակությունը տարրերով, հաշվի առնելով կարգը։
    • Intersect: գտնում է ընդհանուր տարրերը երկու հավաքածուներում։
    • Except: գտնում է այն տարրերը, որոնք առկա են մեկ հավաքածուում, բայց բացակայում մյուսում։
    • Union: միավորում է երկու հավաքածուների եզակի տարրերը։
  3. 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())
{
    // Հավաքածուները պարունակում են նույն տարրերը՝ առանց կարգի հաշվի առնելու
}