2013-01-09 39 views
4

我有以下阵列:阵列得到最小值比其他价值较大的

float[] arr = { 0, 0.1f, 0, 0.1f, 0, 0.2f }; 

什么是最优雅的方式来选择分钟值比其他值大大于或?

我试过使用Min()Select...From...OrderBy...First(),但直到现在没有运气。

回答

17

使用LINQ方法Where筛选出零值,然后使用LINQ方法Min检索所得集合的最低值。

arr.Where(f => f > 0).Min(); 
+1

如何处理空值例外在这种情况下,当arr.Where(F =>˚F> 0)不返回任何结果? –

3

您可以排除使用Where值,然后应用Min

array.Where(a => a > 1 && a < 10).Min(); 
2

尝试使用Where过滤器;

基于谓词过滤一系列值。

并使用Min()方法。

返回一系列值中的最小值。

arr.Where(a => a > 0).Min(); 

这里是一个DEMO

2

如果所有数据都小于“某些其他值”,所有当前的答案都会得到例外。所以,如果这不是你想要的,你会得到null在这种情况下,此代码:

float[] arr = { 0, 0.1f, 0, 0.1f, 0, 0.2f }; 
var someOtherValue = 0; 

var min = arr.Where(x => x > someOtherValue) 
      .Cast<float?>() 
      .Min(); 
+1

或者我建议他可以在数组中没有“好”值的情况下使用'arr.Where(x => x> someOtherValue).DefaultIfEmpty(float.PositiveInfinity).Min()' 。 –