2010-11-03 142 views
0

我有一個Dictionary<string,string[]> 一些示例值修改字典

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

我想數組的長度是所有值的最大值這在我的情況下是5鍵1 這樣我就可以得到一個結果作爲:

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

我想用類似的方法將Dictionary封裝到我自己的類中,除非每次添加值時,如果必須擴展該數組以包含該值,則可以擴展字典中所有其他數組值的大小。

如果要提高效率,每次發生這種情況時都會使數組翻倍,以避免代碼效率低下。您可以跟蹤所有數組的虛擬「最大大小」,即使您通過將它跟蹤在類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 
);