Добавить элементы в словарь <int, List <int>> - PullRequest
6 голосов
/ 29 октября 2009

Итак, я перебираю некоторые объекты и инициализирую объект Dictionary>.

Итак, сначала я проверяю, существует ли ключ, добавлю ли он в список

Если этого не произойдет, я создам новый ключ и новый список

Это правильная логика?
Я должен буду сделать:

new List<int>();

первый раз, когда я вставляю элемент, верно?

т.е:.

if(myDic.ContainsKey(car.ID))
{
      myDic[car.ID].Add(car.MfgID);
}
else
{
   myDic.Add(car.ID, new List<int>);
   myDic[car.ID].Add(car.MfgID);
}

1 Ответ

23 голосов
/ 29 октября 2009

Ваш подход работает отлично. Это немного неэффективно, так как требует двух словарных поисков (один для Contains и один для добавления элемента в список). Вы можете сделать это более эффективно, используя метод Dictionary.TryGetValue:

List<int> list;
if (!myDic.TryGetValue(car.ID, out list))
    myDic.Add(car.ID, list = new List<int>());
list.Add(car.MfgId);

Более эффективно заполнить список и добавить его в словарь за один раз (если, конечно, это возможно в вашем случае). В C # 3.0 есть функция инициализаторы коллекций , которая позволяет легко заполнять список, если элементы известны во время компиляции:

var list = new List<int> { 1, 9, 8, 9, 1, 8, 1, 2 }; 

Вы также можете рассмотреть возможность использования как-то так, чтобы сопоставить ключ с несколькими значениями .

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...