Как добавить элементы, используя списки в словарь, не просматривая его? - PullRequest
1 голос
/ 03 февраля 2011

У меня есть этот словарь -

IDictionary<DateTime, int> kamptslist = new Dictionary<DateTime, int>();
List<int> listints= GetListofints(); //for values
List<int> listdates= GetListofdates();// for keys

Могу ли я как-то назначить списки непосредственно в словарь, вместо того, чтобы фактически делать foreach и добавлять по одному элементу за раз?

Ответы [ 3 ]

6 голосов
/ 03 февраля 2011

Используйте Enumerable.Zip, чтобы объединить две последовательности вместе, а затем используйте Enumerable.ToDictionary:

var kamptslist = listdates.Zip(listints, (d, n) => Tuple.Create(d, n))
                          .ToDictionary(x => x.Item1, x => x.Item2);
5 голосов
/ 03 февраля 2011

Вы можете сделать это легко с .NET 4:

var dictionary = listints.Zip(listdates, (value, key) => new { value, key })
                         .ToDictionary(x => x.key, x => x.value);

Без .NET 4 это немного сложнее, хотя вы всегда можете использовать грязный хак:

var dictionary = Enumerable.Range(0, listints.Count)
                           .ToDictionary(i => listdates[i], i => listints[i]);

РЕДАКТИРОВАТЬ: Согласно комментарию, это прекрасно работает с явно типизированной переменной:

IDictionary<DateTime, int> kamptslist = 
     listints.Zip(listdates, (value, key) => new { value, key })
             .ToDictionary(x => x.key, x => x.value);
0 голосов
/ 03 февраля 2011
IDictionary<DateTime, int> kamptslist = GetListofdates()
    .Zip(
        GetListofints(), 
        (date, value) => new { date, value })
    .ToDictionary(x => x.date, x => x.value);
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...