Добавить элементы в словарь <int list>&gt; </int>

Asked
Viewd18883

7

Итак, я перебираю некоторые объекты и инициализирую объект 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

Ваш подход работает нормально.Это немного неэффективно, поскольку требует двух поисков в словаре (один для 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 }; 
 

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

  • Отлично, теперь вам с Ридом просто нужно объединить оба ответа в один :)

    Pavel Minaev28 октября 2009, 22:02
  • @Pavel: Мой ответ устраняет необходимость переупорядочивания, упомянутого в ответе Рида.Он всегда выполняет поиск в одном словаре.

    Mehrdad Afshari28 октября 2009, 22:07
  • Да, еще стоит упомянуть инициализаторы коллекций.

    Pavel Minaev28 октября 2009, 22:03