0

タイプの辞書があります

Dictionary<int, GValue> 

ここで、GValue は 2 つの double 値 P1 と P2 を含むオブジェクトです

この Dictionary から最大 P1 と P2 を取得するにはどうすればよいですか?

私はこれまでにこれを試しました

c.CalculateGraphMetrics(nodeXLControl1.Graph).Max(s => s.Value.P1);

エラーは発生しませんが、デバッグ時に結果が表示されます

Expression cannot contain Lambda expressions
4

2 に答える 2

1

再。最大値に対応するキーの取得: のオーバーロードの1 つを使用して同様の効果MaxByを得ることができる場合の複雑な実装がたくさんあります。Aggregate

var keyForMaxP1 = dict.Keys.Aggregate((i, j) => dict[i].P1 >= dict[j].P1 ? i : j);
var keyForMaxP2 = dict.Keys.Aggregate((i, j) => dict[i].P2 >= dict[j].P2 ? i : j);

編集:複数の最大キーを取得する場合は、次のようなものが必要です

var allMaxKeysForP1 = dict.Keys.Aggregate(
    new { Value = double.NegativeInfinity, Keys = new List<int>() },
    (a, k) =>
        {
            if (a.Value > dict[k].P1) return a;
            if (a.Value.Equals(dict[k].P1))
            {
                a.Keys.Add(k);
                return a;
            }
            return new { Value = dict[k].P1, Keys = new List<int> { k } };
        },
    a => a.Keys);

その時点で、これをAllMaxByメソッドとして実装することを検討してください。

于 2013-05-03T07:59:02.167 に答える