|
|
1
325
|
|
|
2
245
不幸的是,没有一个内置的方法来实现这一点,但它很容易为您自己实现。以下是它的精髓:
用法示例:
如果有多个元素,则使用最小值。
或者,您可以使用我们提供的实现
MoreLINQ
在里面
MinBy.cs
. (有一个对应的
通过软件包管理器控制台安装:
|
|
|
3
156
注:为了完整性,我加入了这个答案,因为OP没有提到数据源是什么,我们不应该做任何假设。
可能会慢一点
因为它可能需要排序
全部的
中的项目
更新:实际上我不应该称这个解决方案为“幼稚”,但是用户需要知道他在查询什么。此解决方案的“慢度”取决于底层数据。如果这是一个数组或
|
|
4
65
我会成功的 |
|
|
5
56
那么你是在要求
我一直在寻找一种干净、高效(及时)的方法来做到这一点。我想我找到了一个: 这种模式的一般形式是:
对于7.0之前的C#版本, anonymous type 可以改为使用:
它们之所以有效,是因为值元组和匿名类型都有合理的默认比较器:对于(x1,y1)和(x2,y2),它首先进行比较
笔记
在我上面
它可以通过预滤波来实现
附注2
|
|
6
22
无额外软件包的解决方案:
您还可以将其包装为扩展:
顺便说一句O(n^2)不是最好的解决方案。 保罗·贝茨 给了比我更肥的解决方案。但我的仍然是LINQ解决方案,它比这里的其他解决方案更简单、更简短。 |
|
|
7
9
|
|
|
8
3
|
|
|
9
3
聚合的使用非常简单(相当于其他语言中的折叠):
唯一的缺点是每个序列元素访问属性两次,这可能会很昂贵。这很难解决。 |
|
|
10
2
在.NET6(预览版7)或更高版本中,有新的内置方法 Enumerable.MaxBy 和 Enumerable.MinBy 为了实现这一点。
|
|
|
11
1
以下是更通用的解决方案。它本质上做了相同的事情(按O(N)顺序),但在任何IEnumberable类型上都可以,并且可以与属性选择器可以返回null的类型混合使用。
|
|
|
12
1
尝试以下想法:
|
|
|
13
1
您可以像SQL中的order by和limit/fetch only技巧一样进行操作。所以,您按出生日期升序排序,然后只取第一行。
|
|
|
14
0
再次编辑:
Min<(Of <(TSource, TResult>)>)(IEnumerable<(Of <(TSource>)>), Func<(Of <(TSource, TResult>)>)) 按您所说的返回结果类型。 我想说一个可能的解决方案是实现IComparable并使用它 Min<(Of <(TSource>)>)(IEnumerable<(Of <(TSource>)>)) ,它确实从IEnumerable返回一个元素。当然,如果您不能修改元素,这对您没有帮助。我觉得MS的设计有点奇怪。 当然,如果需要,您可以始终执行for循环,或者使用Jon Skeet提供的MoreLINQ实现。 |
|
|
15
0
另一个实现可以使用可为null的选择器键,对于引用类型的集合,如果找不到合适的元素,则返回null。 例如,这可能有助于处理数据库结果。
|
|
|
16
0
如果要选择具有最小或最大特性值的对象。另一种方法是使用实现IComparable。
最大的执行将是。
Min的实现将非常简单。
通过这种方式,可以比较任何对象,并在返回对象类型时获取最大值和最小值。 希望这能帮助别人。 |
|
|
17
0
通过IEnumerable上的扩展函数返回对象和找到的最小值的一种方法。它采用一个Func,可以对集合中的对象执行任何操作:
|
|
18
0
|
|
|
19
-1
您可以像MoreLinq一样使用现有的linq扩展。但是如果您只需要这些方法,那么您可以在这里使用简单的代码:
|