修改字典

时间:2010-11-03 10:34:37

标签: c# generics dictionary extension-methods

我有Dictionary<string,string[]> 一些示例值是

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

我希望数组长度为所有值的最大值,在我的情况下,Key1为5 所以我可以得到一个结果:

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

因此所有键具有相同的数组长度= 5,之前不存在的值是空值“”。 怎么办呢?

3 个答案:

答案 0 :(得分:2)

我使用类似的方法将Dictionary封装到我自己的类中,除非添加了值,如果必须扩展该数组以包含该值,则扩展字典中所有其他数组值的大小。

如果你想提高效率,每次发生这种情况时我会将数组加倍,以避免代码效率低下。您可以跟踪所有数组的虚拟“最大大小”,即使您通过在类int变量中跟踪它们来实际加倍它们也是如此。

答案 1 :(得分: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 :(得分: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
);