我有一个接受词典
的参数的方法static IDictionary<double, double> Merge(params Dictionary<double, double>[] dicts)
{
return dicts.SelectMany(p => p).ToLookup(p => p.Key, p => p.Value)
.ToDictionary(p => p.Key, p => p.Max());
}
我可以使用var r = Merge(r1,r2,r3);
,它会正常工作。 r1,r2,r3是字典。
问题是我不知道我拥有的词典数量,它有波动,有时是3,有时是30或300.我在列表中有词典。 Actualy我有一个班级列表。所以我不得不让它在foreach循环中工作?
List<Class1> c = new List<Class1>();
class Class1
{
public Dictionary<Double, Double> r1 = new Dictionary<Double, Double>();
}
答案 0 :(得分:3)
您有一个接受字典数组的方法,因此您只需将列表转换为数组。
var result = Merge(listOfDictionaries.ToArray());
答案 1 :(得分:2)
,现在是一个应该解决您的问题的更新。新函数merge采用IEnumerable Class1
并将其合并到Dictionary
。它使用下面定义的Merge(IEnumerable<Dictionary<double, double>> dicts)
:
static Dictionary<Double, Double> Merge(IEnumerable<Class1> classes)
{
return Merge(classes.Select(c => c.r1));
}
原始答案:
参数类型定义的一个小改动应该这样做
static IDictionary<double, double> Merge(IEnumerable<Dictionary<double, double>> dicts)
{
return dicts.SelectMany(p => p)
.ToLookup(p => p.Key, p => p.Value)
.ToDictionary(p => p.Key, p => p.Max());
}
现在你可以传递一个词典列表
修改强> 如果您想使用这两种变体,可以这样做
static IDictionary<double, double> Merge(params Dictionary<double, double>[] dicts)
{
return Merge((IEnumerable<Dictionary<double, double>>)dicts);
}