Как добавить массив в Dictionary C#

127
14 января 2021, 09:10

Есть Dictionary такого типа:

Dictionary<string, string> vocabulary = new Dictionary<string, string>();

В него необходимо добавить 2 заполненных массива типа string tx1 и tx2, пробовал добавить через цикл, не получается.

 for (int i = 0; i < tx1.Length; i++)
        {
            for (int j = 0; j < tx2.Length; j++)
            {
                vocabulary.Add(tx1[i], tx2[j]);
            }
        }

Получаю исключение: "Элемент с тем же ключом уже был добавлен." Как правильно заполнить? Заранее спасибо.

Answer 1
       если массивы соответствуют ключу => значению
        for (int i = 0; i < tx1.Length; i++)
        {
            vocabulary.Add(tx1[i], tx2[i]);
        }
Answer 2

Даешь магию кортежей и LINQ - однострочник!

var keys = new[] {"one", "two", "three"};
var values = new[] {"oneV", "twoV", "threeV"};  
var dictionary = keys.Select((k, i)=>(k, i)).ToDictionary(x=>x.k, x=>values[x.i]);

Второй вариант, чуть более длинный

var dictionary = Enumerable.Range(0, Math.Min(keys.Length, values.Length))
                           .ToDictionary(i => keys[i], i=>values[i]).Dump();
Answer 3

Словарь содержит пары "ключ-значение". Если значение может быть не уникальным, т.е. повторяться, то ключ должен быть уникальным, т.к. доступ к значениям словаря производится по ключу. Перед добавлением пары "ключ-значение" в словарь, можно проверить наличие/отсутствие ключа и на основе результата определять дальнейшее поведение:

for (int i = 0; i < tx1.Length; i++) {
    if(vocabulary.ContainsKey(tx1[i])) {
        Console.WriteLine($"key {tx1[i]} already exists");
        continue;
    }
    vocabulary.Add(tx1[i], tx2[i]);
}

Ссылки по теме

  • Dictionary.ContainsKey(TKey)
READ ALSO
Плавное изменение цвета в unity

Плавное изменение цвета в unity

Нужно что бы спрайт плавное изменял свой цвет в красный оттенок ,а потом обратно в свой дефолтный (хочу сделать мигание)Возможно ли такое...

104
Telegram api ошибка dotnet

Telegram api ошибка dotnet

Всем привет! Сегодня решил попробовать написать бота для Telegram на c#Использовал dotnet

115
c# конверт Memory&lt;char&gt; в Memory&lt;byte&gt;

c# конверт Memory<char> в Memory<byte>

Нужно получить Memory<byte> из string без создания промежуточных массивов

121
C# BindingSource Combobox данные из другой таблицы

C# BindingSource Combobox данные из другой таблицы

В С# + MS SQL через ADONET есть так скажем 2 таблицы:

111