我想按字段查找列表中的最小元素,但没有循环。LINQ Min 返回的不是集合中的对象,而是逻辑字段类型(不!)。
C++ 中有一些函数允许您传递要比较的函数,并返回一个合乎逻辑的集合对象(是!)。
例子:
class A
{
public int x;
public int y;
}
...
List<A> list = new List<A>();
...
//можно так
int min = int.MaxValue;
A res;
foreach(var it in list)
{
if( it.x < min )
{
min = it.x;
res = it;
}
}
//или так(наверно, не проверял) но тут как бы уже два прохода по циклу.
int min1 = list.Min(it => it.x);
A res1 = list.Where(it => it.x == min1).First();
C#中有这样的东西吗?无法连接外部仪器。
谢谢!
这在任何方面都是可能的。
例如,像这样:
或者您可以从 nuget 安装 MoreLinq并编写
好吧,如果你不想连接别人的库,自己写也不会花很长时间:
有几种方法。
实现接口
IComparable:现在您可以简单地调用该方法
Min():使用方法
Aggregate。一种非常奇怪的方式,但不直观。在查看这样的设计时,很难理解它到底做了什么。
信息:
没有循环你就不能写。LINQ to Objects“在幕后”调用相同的 ForEach 并遍历集合的所有元素,就像您明确使用循环一样。
另一件事是一切都变得更加简洁......