добавить ключ и значение из разных коллекций в словарь - PullRequest
0 голосов
/ 12 января 2012

У меня есть два массива со строковыми значениями и один словарь, я пытаюсь добавить значения из массива1 в качестве ключа и значения из массива 2 в качестве значения в словаре.

Что является лучшим в этом случае?Я пытался следовать

foreach(var i in array1)
{
    foreach(var t in array2)
    dictionary.add(i.value, t.value)
}

Ответы [ 4 ]

6 голосов
/ 12 января 2012

Ну, вы могли бы сделать (в .NET 4):

var dictionary = array1.Zip(array2, (key, value) => new { key, value })
                       .ToDictionary(pair => pair.key, pair => pair.value);

Это в основном объединяет два массива, так что в итоге вы получаете последовательность пар.Затем вы вызываете метод расширения ToDictionary, извлекая ключ и значение из каждой пары.

В качестве альтернативы вы можете сделать это по старинке:

var dictionary = new Dictionary<string, string>();
for (int i = 0; i < array1.Length; i++)
{
    dictionary[array1[i]] = array2[i]; // Or use Add
}

конечно, следует убедиться, что массивы имеют одинаковую длину.

2 голосов
/ 12 января 2012

Вы можете использовать метод расширения .Zip:

var array1 = new[] { "key1", "key2", "key3" };
var array2 = new[] { "value1", "value2", "value3" };
if (array1.Length != array2.Length) 
{
   throw new Exception("The two arrays must have same lengts");
}
Dictionary<string, string> dic = array1
    .Zip(array2, (x, y) => new { Key = x, Value = y })
    .ToDictionary(x => x.Key, x => x.Value);
0 голосов
/ 12 января 2012

другой подход linq

var dictionary = new Dictionary<string, string>();
foreach (var pair in array1.Zip(array2, (a, b) => new KeyValuePair<string, string>(a, b)))
    ((ICollection<KeyValuePair<string, string>>)dictionary).Add(pair);

EDIT

Более читабельно:

var dictionary = new Dictionary<string, string>();
var collection = (ICollection<KeyValuePair<string, string>>)dictionary;
var pairs = array1.Zip(array2, (a, b) => new KeyValuePair<string, string>(a, b));

foreach (var pair in pairs)
    collection.Add(pair);
0 голосов
/ 12 января 2012

2 массива имеют одинаковую длину?если они представляют собой простой цикл, то добьются цели,

for(int i = 0; i<array1.length();i++)
{
  dict.put(array1[i],array2[i]);
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...