我有一个 class A { public float Score; ... }
和一个 IEnumerable<A> items
,想要找到具有最小分数的 A
实例。
使用 items.Min(x => x.Score)
只能得到最小分数而不能得到具有最小分数的实例。
如何通过只迭代一次数据来获取实例呢?
编辑:目前有三种主要解决方案:
编写扩展方法(由Svish提出)。优点:易于使用并且每个项目仅评估一次分数。 缺点:需要扩展方法。(我选择了这个解决方案应用在我的工程中。)
使用Aggregate(由Daniel Renshaw提出)。优点:使用内置的LINQ方法。缺点:对于不熟悉的人稍微有些难以理解,并且会多次调用评估器。
实现IComparable(由cyberzed提出)。优点:可以直接使用Linq.Min。缺点:固定为一个比较器 - 在执行最小计算时无法自由选择比较器。
items.MinBy(x => x.Score)
,详见重复内容。 - Petr R.