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

C# C如何将字典列表放入数组中,c#,linq,dictionary,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

我有一个接受字典参数的方法

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());
}

在编辑了原始问题之后,现在需要一个更新来修复您的问题。新函数merge获取Class1的IEnumerable并将其合并到字典中。它使用以下定义的MergeIEnumerable目录:

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

您有一个接受字典数组的方法,因此只需将列表转换为数组

var result = Merge(listOfDictionaries.ToArray());

如何将字典列表编成“字符串”?标题与您的问题有什么关系?@JohnRyann我更改了答案以适应您的更新!当编译时参数数量已知时,这将禁止使用该方法。如果这样做了,它很可能是一个额外的重载,而不是方法本身的替换。在一个提示中修复了这个问题。另外,您的编辑是错误的;因为它正在接受字典序列,这是不正确的。这可能会迭代字典列表,这对性能不好@埃斯卡已经提到词典的数量很少。这绝不是性能问题。这份清单需要有数百万或数十亿个条目,才能有一点意义。如果这件事很重要的话,它很可能不会被人们记住。这是一个尝试优化的错误位置。对于这样一个微不足道的微优化,否决一个答案是非常荒谬的。如果你多次这样做,它会降低性能。你不知道代码在哪里运行,我也不知道。@esskar该操作本身比该操作要贵几个数量级。要使这一点足以产生任何可测量的差异,所进行的合并量需要相当大,这很可能是设计不当的强烈迹象,因为合并所有N个不同的数据结构本身就是一项昂贵的操作。如果他真的做了很多,我怀疑这是一个迹象,他应该重新设计他的代码,不那么频繁地调用它,因为将字典从一个列表复制到数组将是他的最小问题。@Servy my ListofDictionary实际上是一个有字典的类的列表。如何做到这一点?
var result = Merge(listOfDictionaries.ToArray());