我正在发现C#
用于处理集合的工具。
假设我有一个元素列表,并且我想检索最满足某个属性的元素。基本上是一个elements.Max(predicate)
,除了我对最佳元素的索引感兴趣。我想要索引而不是元素本身的原因是可能没有这样的元素,并且类型不可为空。
编写一个这样做的函数是微不足道的,但我有兴趣使用 C# 提供的工具的表现力来获得一个简洁、清晰和最优( O(n) ) 的解决方案。
在这一点上,我有以下代码,它看起来仍然很混乱,并且对属性进行了两次评估。
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()
低于某个阈值,则丢弃该元素。