2016-04-18 1 views
0

Я хочу, чтобы заполнить список в dictionary.timeslot_events.Add(t, new List<int>() { i }); , но он дает мне исключение, что больше элемента с тем же ключ уже добавил.
Я также попытался заполнить список добавкой функции timeslot_events.Add(t, new List<int>() { i });, но это дает мне исключение, что данный ключ не присутствовал в словаре.Как заполнить список динамически в словаре в C#?

любезное руководство, как я могу заполнить его успешно.? В C++, я использовал, чтобы сделать это с map<int, vector<int>>

for (int i = 0; i < data.noevents; i++) 
{ 
    int t = (int)(rg.Next(1, 45)); 
    Console.WriteLine(t); 
    timeslot_events.Add(t, new List<int>() { i }); 

} 
+2

Вы генерируете случайные числа между 1-45 и используете их в качестве ключа. Возможно, что одно и то же число генерируется дважды, а словарь должен иметь уникальный ключ. – Nitin

+0

в C++ я использовал для i с картой > – Umme

+0

вы должны правильно объяснить, что именно вы хотите? что вы хотите как ключ, а что значение – Nitin

ответ

1

Проверьте, если ключ уже присутствует, то добавьте против этого ключа еще вставить новый KeyValue пар, как показано ниже:

for (int i = 0; i < data.noevents; i++) 
{ 
    int t = (int)(rg.Next(1, 45)); 
    Console.WriteLine(t); 
    if (timeslot_events.ContainsKey(t)) 
    { 
     if (timeslot_events[t] == null) 
     { 
      timeslot_events[t] = new List<int>(); 
     } 
     timeslot_events[t].Add(i); 
    } 
    else 
    { 
     timeslot_events.Add(t, new List<int>() { i }); 
    } 

} 
1

Я хотел бы использовать немного LINQ.

var query = 
    from n in Enumerable.Range(0, data.noevents) 
    group n by rg.Next(1, 45); 

foreach (var x in query) 
{ 
    timeslot_events.Add(x.Key, x.ToList()); 
} 
Смежные вопросы