C#如何将字典列表放入数组中

时间:2014-08-13 15:27:30

标签: c# linq dictionary

我有一个接受词典

的参数的方法
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>();
    }

2 个答案:

答案 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);
}