Добавил:
Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Скачиваний:
32
Добавлен:
15.01.2021
Размер:
90.99 Кб
Скачать

Приклад 1. Без використання класу HashSet

Створити 2 лінійні списки цілих чисел (класу List<T>), у яких є однакові елементи. Створити список unionList, який містить елементи обох списків без повторень (об’єднання). Створити список intersectList, який містить елементи, які є в обох списках (перетин).

class Program

{

static void PrintList(List<int> list)

{

Console.Write("{ ");

foreach (var item in list)

{

Console.Write(item);

Console.Write(" ");

} Console.WriteLine("}");

}

static void Main(string[] args)

{

List<int> firstList = new List<int>();

firstList.Add(1);

firstList.Add(2);

firstList.Add(3);

firstList.Add(4);

firstList.Add(5);

Console.Write("firstList = ");

PrintList(firstList);

List<int> secondList = new List<int>();

secondList.Add(2);

secondList.Add(4);

secondList.Add(6);

Console.Write("secondList = ");

PrintList(secondList);

List<int> unionList = new List<int>();

unionList.AddRange(firstList);

for (int i = unionList.Count - 1; i >= 0; i--)

{

if (secondList.Contains(unionList[i]))

{

unionList.RemoveAt(i);

}

}

unionList.AddRange(secondList);

Console.Write("union = ");

PrintList(unionList);

List<int> intersectList = new List<int>();

intersectList.AddRange(firstList);

for (int i = intersectList.Count - 1; i >= 0; i--)

{

if (!secondList.Contains(intersectList[i]))

{

intersectList.RemoveAt(i);

}

}

Console.Write("intersect = ");

PrintList(intersectList);

Console.ReadKey();

}

}

Реалізуємо той самий приклад з використанням класу HashSet.

class Program

{

static void PrintList(HashSet<int> list)

{

Console.Write("{ ");

foreach (var item in list)

{

Console.Write(item);

Console.Write(" ");

}

Console.WriteLine("}");

}

static void Main(string[] args)

{

HashSet<int> firstList = new HashSet<int>(); //перша множина

firstList.Add(1);

firstList.Add(2);

firstList.Add(3);

firstList.Add(4);

firstList.Add(5);

Console.Write("firstList = ");

PrintList(firstList);

HashSet<int> secondList = new HashSet<int>(); //друга множина

secondList.Add(2);

secondList.Add(4);

secondList.Add(6);

Console.Write("secondList = ");

PrintList(secondList);

//Об'єднання множин

HashSet<int> unionList = new HashSet<int>(firstList);

unionList.UnionWith(secondList); //Об'єднання множин

Console.Write("union = ");

PrintList(unionList);

//перетин множин

HashSet <int> intersectList = new HashSet<int>(firstList);

intersectList.IntersectWith(secondList);

Console.Write("intersect = ");

PrintList(intersectList);

Console.ReadKey();

}

}

Важливо

При роботі з множинами в .NET Framework необхідно враховувати наступну особливість.

Результат виконання операції з множинами зберігається в тій змінній, для якої був викликаний відповідним методом, переписуючи початкову колекцію. Тобто, перша колекція буде змінена.

Приклад 2

class Program

{

static void Main()

{

HashSet<int> evenNumbers = new HashSet<int>();

HashSet<int> oddNumbers = new HashSet<int>();

for (int i = 0; i < 5; i++)

{

// Заповнення першої колекції evenNumbers парними числами

evenNumbers.Add(i * 2);

// Заповнення другої колекції oddNumbers непарними числами

oddNumbers.Add((i * 2) + 1);

}

Console.Write("evenNumbers contains {0} elements: ", evenNumbers.Count);

DisplaySet(evenNumbers);

Console.Write("oddNumbers contains {0} elements: ", oddNumbers.Count);

DisplaySet(oddNumbers);

// Створення нової колекції numbers з чисел evenNumbers.

HashSet<int> numbers = new HashSet<int>(evenNumbers);

Console.WriteLine("numbers UnionWith oddNumbers...");

//Об’єднання множин

numbers.UnionWith(oddNumbers);

Console.Write("numbers contains {0} elements: ", numbers.Count);

DisplaySet(numbers);

Console.ReadKey();

}

static void DisplaySet(HashSet<int> set)

{

Console.Write("{");

foreach (int i in set)

{

Console.Write(" {0}", i);

}

Console.WriteLine(" }");

}

}

Елементами множини можуть бути рядки чи об’єкти класів.