簡體   English   中英

在多個字典中找到每個鍵的最大值

[英]finding the max of value for each key in multiple dictionaries

我有3個字典,需要創建一個新字典,該字典應包含相同鍵的最大數量的值。 例如r1具有(10,100),r2具有(10,200),r3具有(10,500)。 新字典應該有10、500。

public Dictionary<Double, Double> r1 = new Dictionary<Double, Double>(); 
public Dictionary<Double, Double> r2 = new Dictionary<Double, Double>(); 
public Dictionary<Double, Double> r3 = new Dictionary<Double, Double>(); 
new[] { r1, r2, r3 }.SelectMany(p => p).GroupBy(p => p.Key)
                    .ToDictionary(g => g.Key, g => g.Max(p => p.Value));

編輯:

class Program
{
    static void Main()
    {
        var r1 = new Dictionary<double, double> { { 10, 200 } };
        var r2 = new Dictionary<double, double> { { 10, 300 } };
        var r3 = new Dictionary<double, double> { { 10, 500 } };

        var r = Merge(r1, r2, r3);

        foreach (var p in r)
            Console.WriteLine("{0}: {1}", p.Key, p.Value);
    }

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

也許是這樣的:

r1.Concat(r2).Concat(r3)
  .GroupBy(p => p.Key)
  .Select(g => new KeyValuePair<double, double>(g.Key, g.Max(p => p.Value)))
  .ToDictionary(p => p.Key, p  => p.Value);

未經測試,但想法是:

  • 得到所有的對
  • 按鍵分組
  • 生成每個組的最大值的新對
  • 將此集轉換為字典

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM