C#
コレクションを操作するためのツールが提供されていることを発見しました。
要素のリストがあり、プロパティを最も満たすものを取得したいとします。基本的には、最高の要素elements.Max(predicate)
のインデックスに興味があることを除いて。要素自体ではなくインデックスが必要な理由は、そのような要素がない可能性があり、型がnull許容でないためです。
これを行う関数を作成するのは簡単ですが、C#が提供するツールの表現力を使用して、簡潔で、明確で、最適な(O(n))ソリューションを取得することに興味があります。
この時点で、次のコードがありますが、まだ雑然としているように見え、プロパティを2回評価します。
List<foo> elements;
private int getBest(object x)
{
var indices = Enumerable.Range(0, elements.Count);
return indices.Aggregate(-1, (best, next) =>
(-1 == best || eval(x, elements[next]) > eval(x, elements[best])) ? next : best);
}
このコードを改善するにはどうすればよいですか?
補遺:わかりやすくするためにコードには入れませんでしたがeval()
、特定のしきい値を下回ると、要素は破棄されます。