再。最大値に対応するキーの取得: のオーバーロードの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
メソッドとして実装することを検討してください。