Как удалить повторяющиеся данные при вызове AddTest, удалить дубликаты (перед добавлением в list) ??
Необходимо добавить Contains, но как мне это сделать с помощью List?

private static List<KeyValuePair<byte[], string>> list = new List<KeyValuePair<byte[], string>>();

public static void AddTest(byte[] myarray, string test)
{
   list.Add(new KeyValuePair<byte[], string>(myarray, test));
}
-2
Andrey Vasiliykov 10 Окт 2021 в 21:19

2 ответа

Лучший ответ

Прежде всего, мы должны прийти к соглашению : что такое дубликаты

 KeyValuePair<byte[], string>

Экземпляры. Предполагая, что экземпляры KeyValuePair<byte[], string> x и y дублируются тогда и только тогда, когда оба Key и Value равны, т. Е.

 x.Key.SequenceEquals(y.Key) && x.Value == y.Value

Мы можем реализовать необходимый компаратор :

public sealed class MyEquComparer : IEqualityComparer<KeyValuePair<byte[], string>> {
  public bool Equals(KeyValuePair<byte[], string> x, KeyValuePair<byte[], string> y) =>
    Enumerable.SequenceEqual(x.Key, y.Key) && string.Equals(x.Value, y.Value);

  public int GetHashCode([DisallowNull] KeyValuePair<byte[], string> obj) =>
    obj.Key == null ? 0 : obj.Key.Length;
}

А затем с помощью comparer избавьтесь от дубликатов:

private static List<KeyValuePair<byte[], string>> list =
    new List<KeyValuePair<byte[], string>>();

private static HashSet<KeyValuePair<byte[], string>> unique = new 
    HashSet<KeyValuePair<byte[], string>>(new MyEquComparer());

public static void AddTest(byte[] myarray, string test)
{
   // only if we're adding a unique item, we put it into the list 
   if (unique.Add(test))
       list.Add(new KeyValuePair<byte[], string>(myarray, test));
}
0
Dmitry Bychenko 10 Окт 2021 в 19:00

Рассмотрите возможность использования словаря. Это позволяет использовать TryAdd, который ничего не делает, если словарь уже содержит ключ (также он не генерирует исключение).

Дополнительная информация: Здесь

0
Davi Bertolli 10 Окт 2021 в 20:31