2017-02-12 2 views
0

я есть словарь, как это:добавляющие новые значения в словарь со списком в качестве значения

Dictionary<string,List<string>> StudentsByTeacherName = new Dictionary<string,List<string>>(); 

этот словарь внутри цикла я хочу словарной значение для конкретного ключа обновляется в каждом цикле. если нет новых ключей там, чтобы добавить в словарь

foreach (var item5 in StudentsByTeacherName) 
       { 
        if (StudentsByTeacherName.ContainsKey(item5.Key)) 
        { 

        } 
        else 
        { 
         StudentsByTeacherName.Add(item4.Value,StudentName); 
        } 

       } 
+0

Список abc = StudentsByTeacherName ["item3.Key"]; abc.Add ("def"); – jdweng

+1

Вы уверены, что сможете сами это сделать? Вам может быть лучше использовать поиск: 'var lookup = students.ToLookup (s => s.TeacherName);' –

+0

Ваша проверка не имеет смысла. StudentsByTeacherName всегда будет содержать ключ из item5.Key, потому что item5 является пар ключ/значение из StudentsByTeacherName – Brody

ответ

2

я хочу словарное значение для конкретного ключа обновляются в каждом цикле . если нет новых ключей нет, чтобы добавить в словарь

Для этого вместо проверки ContainsKey просто сделать:

TeacherName[item3.Key] = yourStringList; 

Индексатор [] будет обновлять существующий ключ и вставок, если ключ Безразлично» t существует.

+0

спасибо за ответ. но я не хочу, чтобы существующие ключи обновлялись. Я хочу обновить их значения –

+0

@HossainEhsani, вы действительно попробовали этот код? – user3598756

+0

Код, предоставленный Habib, либо обновит * значение *, либо добавит новый ключ, который содержит значение, т. Е. Это похоже на метод AddOrUpdate. Разве это не то, что вы хотели? – mm8

1

Вы не можете изменить свою собственность или значение индексатора, так как это только чтение. Что вы можете сделать, это получить доступ к нему через его индекс:

foreach (var item5 in StudentsByTeacherName) 
    { 
     if (StudentsByTeacherName.ContainsKey(item5.Key)) 
     { 
      //This will add new values on your list of string on specific 
      //keys and will not delete the existing ones: 

      List<string> list = StudentsByTeacherName[item5.Key]; 
      list.Add("Your additional value here"); 
     } 
     else 
     { 
      StudentsByTeacherName.Add(item4.Value,StudentName); 
     } 
    } 

Это обновит значение списка строк, а не сам ключ.

+0

Я думаю, что это удалит предыдущие данные и заменит их новым. Я хочу, чтобы новые данные были добавлены в список. не создавая совершенно новый список –

+0

Хорошо, я понимаю, любезно посмотрите мой обновленный код @HossainEhsani –

0

Попробуйте это.

foreach (var item5 in StudentsByTeacherName) 
{ 
    if(item5.Value == null) 
    { 
     item5.Value = new List<String(); 
    } 

    item5.Value[item4.Key] = item4.Value; 
} 

Я предполагаю, что item4 является Студентом. Это заменит существующее значение или добавит новое значение.