Подтвердить что ты не робот

Как добавить дублирующие ключи в словарь

У меня есть несколько строк из текстовых файлов, которые я хочу добавить в словарь. Я использую словарь в первый раз. Если добавить стартовые строки, то это было нормально, но внезапно у меня появилась ошибка:

Элемент с тем же ключом уже добавлен

Здесь в моем коде есть дубликаты ключей, которые я не могу изменить. Вот мой код в С#

Dictionary<string, string> previousLines = new Dictionary<string, string> { };
previousLines.Add(dialedno, line);

Здесь dialedno - это ключ, а строка - строка текстового файла. Вот код, из которого я извлекаю данную строку на основе ключа.

string tansferOrginExt = previousLines[dialedno];

Итак, моя забота заключается в том, как разрешить добавлять дубликаты ключей в словарь, если это возможно, и если не так, как я могу получить аналогичную функциональность.

4b9b3361

Ответ 1

как разрешить добавлять дубликаты ключей в словарь

Это невозможно. Все ключи должны быть уникальными. В качестве Dictionary<TKey, TValue> реализовано:

Каждый ключ в Dictionary<TKey, TValue> должен быть уникальным в соответствии со Dictionary<TKey, TValue> равенства словаря.

Возможные решения - вы можете сохранить коллекцию строк как значение (т. Lookup<TKey, TValue> Использовать Dictionary<string, List<string>>), или (лучше) вы можете использовать Lookup<TKey, TValue> вместо словаря.


Как проверить наличие дубликатов ключей и удалить предыдущее значение из словаря?

Вы можете проверить, существует ли ключ с помощью previousLines.ContainsKey(dialedno) но если вы всегда хотите удерживать последнюю строку, просто замените любой словарь, который был для ключа, или добавьте новый ключ, если его нет в словаре:

previousLines[dialedno] = line;

Ответ 2

Мы можем использовать список пары значений ключа

List<KeyValuePair<string, string>> myduplicateLovingDictionary= new List<KeyValuePair<string, string>>();
KeyValuePair<string,string> myItem = new KeyValuePair<string,string>(dialedno, line);
myduplicateLovingDictionary.Add(myItem);

Ответ 3

Невозможно добавить повторяющиеся элементы в словарь - альтернативой является использование класса Поиск.

Enumerable.ToLookup Method

Создает общий поиск из IEnumerable.

Ответ 4

Пример:

class Program
        {
             private static List<KeyValuePair<string, int>> d = new List<KeyValuePair<string, int>>();

            static void Main(string[] args)
            {
                 d.Add(new KeyValuePair<string, int>("joe", 100));
                 d.Add(new KeyValuePair<string, int>("joe", 200));
                 d.Add(new KeyValuePair<string, int>("jim", 100));
                 var result = d.Where(x => x.Key == "joe");
                foreach(var q in result)
                    Console.WriteLine(q.Value   );
                Console.ReadLine();
            }
         }

Ответ 5

List< KeyValuePair < string, string>> listKeyValPair= new List< KeyValuePair< string, string>>();
KeyValuePair< string, string> keyValue= new KeyValuePair< string, string>("KEY1", "VALUE1");
listKeyValPair.Add(keyValue);

Ответ 6

Если ваш вопрос заключается в том, можете ли вы добавить один и тот же ключ дважды, ответ - нет. Однако, если вы хотите просто выполнить итерацию по элементу, а затем увеличить количество значений для конкретного ключа, вы можете добиться этого с помощью "TryAdd". метод.

var dict = new Dictionary<int, int>();
        foreach (var item in array)
        {
            dict.TryAdd(item, 0);
            dict[item]++;
        }

То же самое, что мы пытаемся достичь, если еще, может быть достигнуто с помощью этого метода ".

https://docs.microsoft.com/en-us/dotnet/api/system.collections.concurrent.concurrentdictionary-2.tryadd?view=netframework-4.7.2