我有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,之前不存在的值是空值“”。 怎么办呢?
答案 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
);