Приклад 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
Приклад 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
Apple
IBM
Samsung