Как сравнить массив/словарь?
Есть ли способы использовать метод CompareTo на массивах и словарях?
Пример такого использования
using System;
public class Program
{
public static void Main()
{
List<int> list1 = new List<int> {
1, 2, 3, 4, 5
};
List<int> list2 = new List<int> {
5, 4, 3, 2, 1
};
List<int> list3 = new List<int> {
1, 2, 3, 4, 5
};
Console.WriteLine(list1.CompareTo(list2)); // -1
Console.WriteLine(list1.CompareTo(list3)); // 0
Console.WriteLine(list2.CompareTo(list1)); // 1
Console.WriteLine(list2.CompareTo(list3)); // 1
Console.WriteLine(list3.CompareTo(list1)); // 0
Console.WriteLine(list3.CompareTo(list2)); // -1
Dictionary<int, int> dict1 = new Dictionary<int, int> {
[1] = 5,
[2] = 4,
[3] = 3,
[4] = 2,
[5] = 1
};
Dictionary<int, int> dict2 = new Dictionary<int, int> {
[5] = 1,
[4] = 2,
[3] = 3,
[2] = 4,
[1] = 5
};
Dictionary<int, int> dict3 = new Dictionary<int, int> {
[1] = 1,
[2] = 2,
[3] = 3,
[4] = 4,
[5] = 5
};
Console.WriteLine(dict1.CompareTo(dict2)); // -1
Console.WriteLine(dict1.CompareTo(dict3)); // 1
Console.WriteLine(dict2.CompareTo(dict1)); // 1
Console.WriteLine(dict2.CompareTo(dict3)); // 1
Console.WriteLine(dict3.CompareTo(dict1)); // -1
Console.WriteLine(dict1.CompareTo(dict1)); // 0
Console.WriteLine(dict2.CompareTo(dict2)); // 0
Console.WriteLine(dict3.CompareTo(dict3)); // 0
}
}
Желательно чтобы способ проверял и длину, чтобы (new List<int> { 1, 2, 3, 4, 5 }).CompareTo(new List<int> { 1, 2, 3, 4, 5, 6, 7, 8, 9, 10 }) давал -1.
Ответы (1 шт):
Автор решения: Irshat Khuzin
→ Ссылка
List и Dictionary<TKey, TValue> не реализуют интерфейс IComparable и поэтому не имеют метод CompareTo. Вам нужно написать свой собственный компаратор для массивов и словарей и использовать его для сравнения. В приведенном примере использование CompareTo невозможно.