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

Приклад 5.

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

Для цього потрібно створити клас Tovar. Для того щоб можна було порівнювати об’єкти колекції, потрібно зробити клас нащадком інтерфейсу IComparable<Tovar> і реалізувати метод порівняння.

class Tovar: IComparable<Tovar>

{

public int Kod {get;set;}

public string Name { get; set; }

public int CompareTo(Tovar t)

{

//Порівняння об'єктів за віком

Tovar tovar = t as Tovar;

if (tovar != null)

return Kod.CompareTo(t.Kod);

else

throw new ArgumentException("об'єкт не належить до типу Tovar");

}

}

Основна програма

class Program

{//різниця множин

static void Main(string[] args)

{

//Товари на складі

SortedSet<Tovar> tovar = new SortedSet<Tovar>();

tovar.Add(new Tovar { Kod = 4, Name = "Tovar4" });

tovar.Add(new Tovar { Kod = 2, Name = "Tovar2" });

tovar.Add(new Tovar { Kod = 3, Name = "Tovar3" });

tovar.Add(new Tovar { Kod = 1, Name = "Tovar1" });

DisplaySet("Товари на складі ", tovar);

//Товари в магазині

SortedSet<Tovar>tovar1 = new SortedSet<Tovar>();

tovar1.Add(new Tovar { Kod = 2, Name = "Tovar2" });

tovar1.Add(new Tovar { Kod = 1, Name = "Tovar1" });

DisplaySet("Товари в магазині", tovar1);

//Товари, які потрібно замовити

tovar.ExceptWith(tovar1);

DisplaySet("Потрібно замовити", tovar);

Console.ReadKey();

}

static void DisplaySet(string Message, SortedSet<Tovar> set)

{

Console.WriteLine(Message);

foreach (Tovar t in set)

{

Console.WriteLine(" {0}, {1}",t.Kod, t.Name);

}

}

}

Результат

3. Використання Linq для роботи з множинами

Роботу з множинами можна реалізувати за допомогою методів розширення Linq. Ці методи знаходяться в просторі імен Linq.

Це такі методи:

Except: повертає різницю двох колекцій, тобто ті елементи, які є тільки в одній колекції;

Union: об'єднує дві однорідні колекції;

Intersect: повертає перетин двох колекцій, тобто ті елементи, які зустрічаються в обох колекціях;

Крім цього в Linq є багато інших методів для роботи з колекціями [https://metanit.com/sharp/tutorial/15.1.php]

Приклад 6. Різниця множин

За допомогою методу Except можна отримати різницю двох множин:

string[] soft = { "Microsoft", "Google", "Apple"};

string[] hard = { "Apple", "IBM", "Samsung"};

 

// різниця множин

var result = soft.Except(hard);

foreach (string s in result)

    Console.WriteLine(s);

В даному випадку з масиву soft видаляються всі елементи, які є в масиві hard. Результатом операції будуть два елементи:

Microsoft

Google

Приклад 7. Перетин множин

Для отримання перетину множин, тобто спільних для обох наборів елементів, застосовується метод Intersect:

string[] soft = { "Microsoft", "Google", "Apple"};

string[] hard = { "Apple", "IBM", "Samsung"};

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

var result = soft.Intersect(hard);

foreach (string s in result)

    Console.WriteLine(s);

Так як обидва набори мають тільки один спільний елемент, то відповідно тільки він і потрапить в результуючу вибірку:

Apple

Приклад 8. Об'єднання множин

Для об'єднання двох множин використовується метод Union. Його результатом є новий набір, в якому присутні елементи, як з однієї, так і з другої множини. Елементи, які повторюються, додаються в результат тільки один раз:

string[] soft = { "Microsoft", "Google", "Apple"};

string[] hard = { "Apple", "IBM", "Samsung"};

 

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

var result = soft.Union(hard);

 

foreach (string s in result)

    Console.WriteLine(s);

Результатом операції буде наступний набір:

Microsoft

Google

Apple

IBM

Samsung