2010-11-03 3 views
0

У меня есть Dictionary<string,string[]> Некоторые примеры значенияИзменение словаря

Key1 Value="1","2","3","4","5" 
Key2 Value="7","8" 
Key3 Value=null 

Я хочу длину массива, чтобы быть максимально всех значений, которые в моем случае 5 для Key1 так что я могу получить результат as:

Key1 Value="1","2","3","4","5" 
Key2 Value="7","8","","","" 
Key3 Value="","","","","" 

Таким образом, все ключи имеют одинаковую длину массива = 5, а значения, которые раньше не существовали, - это пустые значения "". Как это можно сделать?

ответ

2

Попробуйте

 Dictionary<string, List<string>> dic = new Dictionary<string, List<string>>(); 
     dic.Add("k1", new List<string>() { "1", "2", "3", "4", "5" }); 
     dic.Add("k2", new List<string>() { "7", "8" }); 
     dic.Add("k3", new List<string>()); 

     var max = dic.Max(x => x.Value.Count); 
     dic.ToDictionary(
      kvp => kvp.Key, 
      kvp => 
      { 
       if (kvp.Value.Count < max) 
       { 
        var cnt = kvp.Value.Count; 
        for (int i = 0; i < max - cnt; i++) 
         kvp.Value.Add(""); 
       } 
       return kvp.Value; 
      }).ToList(); 
2

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

Если вы идете на эффективность, я бы удваивал массивы каждый раз, когда это случалось, чтобы избежать неэффективного кода. Вы можете отслеживать виртуальный «максимальный размер» всех массивов, даже если вы эффективно удваиваете их, отслеживая его в переменной класса int.

0
Dictionary<string, string[]> source = GetDictionary(); 

targetSize = source.Values.Select(x => x.Length).Max(); 

Dictionary<string, string[]> result = source.ToDictionary(
    kvp => kvp.Key, 
    kvp => kvp.Value != null ? 
    kvp.Value.Concat(Enumerable.Repeat("", targetSize - kvp.Value.Length)).ToArray() : 
    Enumerable.Repeat("", targetSize).ToArray 
); 
Смежные вопросы