Существует ли встроенный метод для сравнения наборов?

int r,c;//scanf from user

int** a = new int*[r];// pointer to pointer
for(int i = 0; i < r; ++i)//looping till rows exists
    a[i] = new int[c];//allocate for each row how many columns are there
170
задан Uwe Keim 9 June 2018 в 14:11
поделиться

6 ответов

Enumerable.SequenceEqual

Определяет, равны ли две последовательности путем сравнения их элементов при помощи указанного IEqualityComparer (T).

Вы не можете непосредственно сравнить список & словарь, но Вы могли сравнить список значений из Словаря со списком

178
ответ дан H.B. 23 November 2019 в 20:48
поделиться

Нет, потому что платформа не знает, как сравнить содержание Ваших списков.

Взглянули на это:

http://blogs.msdn.com/abhinaba/archive/2005/10/11/479537.aspx

0
ответ дан Mark Ingram 23 November 2019 в 20:48
поделиться

Нет. Платформа набора не имеет никакого понятия равенства. Если Вы думаете об этом нет никакого способа сравнить наборы, который не субъективен. Например, сравнивая Ваш IList с Вашим Словарем, они были бы равны, если бы все ключи были в IList, все значения были в IList или если оба были в IList? Нет никакого очевидного способа сравнить эти два набора без ведома того, что они должны использоваться для так общей цели, равняется методу, не имеет никакого смысла.

0
ответ дан Evil Andy 23 November 2019 в 20:48
поделиться

Я не знал о Счетном. Метод SequenceEqual (Вы изучаете что-то каждый день....), но я собирался предложить использовать дополнительный метод; что-то вроде этого:

    public static bool IsEqual(this List<int> InternalList, List<int> ExternalList)
    {
        if (InternalList.Count != ExternalList.Count)
        {
            return false;
        }
        else
        {
            for (int i = 0; i < InternalList.Count; i++)
            {
                if (InternalList[i] != ExternalList[i])
                    return false;
            }
        }

        return true;

    }

Интересно достаточно, после взятия 2 секунд для чтения о SequenceEqual похоже, что Microsoft создала функцию, которую я описал для Вас.

4
ответ дан Giovanni Galbo 23 November 2019 в 20:48
поделиться

Смотрите на Счетный. Метод SequenceEqual

var dictionary = new Dictionary<int, string>() {{1, "a"}, {2, "b"}};
var intList = new List<int> {1, 2};
var stringList = new List<string> {"a", "b"};
var test1 = dictionary.Keys.SequenceEqual(intList);
var test2 = dictionary.Values.SequenceEqual(stringList);
7
ответ дан aku 23 November 2019 в 20:48
поделиться

.NET Не хватает мощных инструментов для сравнения коллекций. Я разработал простое решение, которое вы можете найти по ссылке ниже:

http://robertbouillon.com/2010/04/29/comparing-collections-in-net/

Это выполнит сравнение на равенство независимо от порядка:

var list1 = new[] { "Bill", "Bob", "Sally" };
var list2 = new[] { "Bob", "Bill", "Sally" };
bool isequal = list1.Compare(list2).IsSame;

Это проверит, были ли добавлены / удалены элементы:

var list1 = new[] { "Billy", "Bob" };
var list2 = new[] { "Bob", "Sally" };
var diff = list1.Compare(list2);
var onlyinlist1 = diff.Removed; //Billy
var onlyinlist2 = diff.Added;   //Sally
var inbothlists = diff.Equal;   //Bob

Это посмотрит, какие элементы в словаре изменились:

var original = new Dictionary<int, string>() { { 1, "a" }, { 2, "b" } };
var changed = new Dictionary<int, string>() { { 1, "aaa" }, { 2, "b" } };
var diff = original.Compare(changed, (x, y) => x.Value == y.Value, (x, y) => x.Value == y.Value);
foreach (var item in diff.Different)
  Console.Write("{0} changed to {1}", item.Key.Value, item.Value.Value);
//Will output: a changed to aaa
5
ответ дан 23 November 2019 в 20:48
поделиться
Другие вопросы по тегам:

Похожие вопросы: