2011-10-13 65 views
0

我有任意数量的字典(在列表中,已经按顺序),我希望外连接。例如,对于Ñ = 2:如何将具有唯一键的字典列表转换为值为列表的字典?

List<Dictionary<string, int>> lstInput = new List<Dictionary<string, int>>(); 
Dictionary<string, int> dctTest1 = new Dictionary<string, int>(); 
Dictionary<string, int> dctTest2 = new Dictionary<string, int>(); 
dctTest1.Add("ABC", 123); 
dctTest2.Add("ABC", 321); 
dctTest2.Add("CBA", 321); 
lstInput.Add(dctTest1); 
lstInput.Add(dctTest2); 

每个字典已经具有唯一键。

我想变换lstInput为:

Dictionary<string, int[]> dctOutput = new Dictionary<string, int[]>(); 

其中dctOutput样子:

"ABC": [123, 321] 
"CBA": [0, 321] 

也就是说,一套dctOutput键是等于设定的键联盟每个字典lstInput;此外,如果没有对应的密钥,则dctOutput中每个值的第* i * th个位置等于第或第0位置的* i * th字典中相应密钥的值。

如何编写C#代码来完成此操作?

回答

0

以下应该做你想要的。

var dctOutput = new Dictionary<string, int[]>(); 
for (int i = 0; i < lstInput.Count; ++i) 
{ 
    var dict = lstInput[i]; 
    foreach (var kvp in dict) 
    { 
     int[] values; 
     if (!dctOutput.TryGetValue(kvp.Key, out values)) 
     { 
      // Allocating the array zeros the values 
      values = new int[lstInput.Count]; 
      dctOutput.Add(kvp.Key, values); 
     } 
     values[i] = kvp.Value; 
    } 
} 

这工作,因为分配的数组初始化所有数值为0。因此,如果以前的字典没有与该键的项目,它的值将在该位置0。如果你想让你的标记值不是0,那么你可以在分配数组后使用该值初始化数组。

相关问题