我有一个class A { public float Score; ... }
和一个,IEnumerable<A> items
并希望找到A
最低分.
使用items.Min(x => x.Score)
给出最小分数而不是具有最小分数的实例.
如何只通过迭代一次数据来获取实例?
编辑:这么长时间有三个主要解决方案:
编写扩展方法(由Svish提出).优点:易于使用和评估每个项目只有一次得分.缺点:需要扩展方法.(我为我的申请选择了这个解决方案.)
使用Aggregate(由Daniel Renshaw提出).优点:使用内置的LINQ方法.缺点:对未经训练的眼睛略微混淆并且不止一次地给评估者打电话.
实施IC Comparable(由网络化提出).优点:可以直接使用Linq.Min.缺点:固定为一个比较器 - 在执行最小计算时无法自由选择比较器.
Dan*_*haw 65
使用聚合:
items.Aggregate((c, d) => c.Score < d.Score ? c : d)
Run Code Online (Sandbox Code Playgroud)
正如所建议的,完全相同的行与更友好的名称:
items.Aggregate((minItem, nextItem) => minItem.Score < nextItem.Score ? minItem : nextItem)
Run Code Online (Sandbox Code Playgroud)
Jam*_*ney 22
尝试 items.OrderBy(s => s.Score).FirstOrDefault();
这可以通过一点点简单的迭代来解决:
float minScore = float.MaxValue;
A minItem = null;
foreach(A item in items)
{
if(item.Score < minScore)
minItem = item;
}
return minItem;
Run Code Online (Sandbox Code Playgroud)
这不是一个很好的LINQ查询,但它确实避免了排序操作,只根据问题的要求迭代列表一次.
归档时间: |
|
查看次数: |
45221 次 |
最近记录: |