Как сравнить масивы по значению

147
06 сентября 2021, 15:40

Есть Dictionary < int[], string > example_dictionary , при записи в него новой переменной мне надо проверить, существует ли уже данный ключ, но если делать так:

if (example_dictionary.ContainsKey(new int[] { ferst_cords[0], ferst_cords[1], second_cords[0], second_cords[1] }))
    //something...

то одинаковые по 'наполнению' массивы все равно показываются как разные. Как сделать чтоб он работал по задумке? Добавление в словарь:

example_dictionary.Add(new int[] { ferst_cords[0], ferst_cords[1], second_cords[0], second_cords[1] }, "hi");
Answer 1

Класс Dictionary может в конструкторе принимать параметр comparer - компаратор, используемый для сравнения объектов в этом словаре.

Создадим класс для сравнения массивов:

class ArrayComparer : IEqualityComparer<int[]>
{
    public bool Equals(int[] x, int[] y)
    {
        return x.SequenceEqual(y);
    }
    public int GetHashCode(int[] obj)
    {
        return obj.Length;
    }
}

Используем его:

var arrA = new int[] { 1, 2, 3 };
var arrB = new int[] { 1, 2, 4 };
var arrC = new int[] { 1, 2, 3 };
var dict = new Dictionary<int[], string>(new ArrayComparer());
dict.Add(arrA, "A");
dict.Add(arrB, "B");
//dict.Add(arrC, "C"); // Exception
Console.WriteLine(dict.Count);
if (dict.ContainsKey(arrC))
    Console.WriteLine("yes");
else
    Console.WriteLine("no");

Используемые пространства имён:

using System;
using System.Collections.Generic;
using System.Linq;
READ ALSO
Почему Visit в ExpressionVisitor так странно реализован?

Почему Visit в ExpressionVisitor так странно реализован?

В общем, если посмотреть код, то видно, что там здоровенный switch, который выбирает нужную реализацию

99
C# - запрос через Tor

C# - запрос через Tor

Можно ли в C# отправить HTTP запрос через Tor? Пробовал использовать адрес прокси из сетевых настроек Tor Browser:

130
Подкорректировать regular expression

Подкорректировать regular expression

Написал вот такую регулярку

136
Вывод данных разделенных символом из базы

Вывод данных разделенных символом из базы

Есть база данных, которая содержит в себе данные в следующем виде(данные случайные):

103