使用具有特定条件的LINQ从列表中获取数字

Kon*_*rad 1 c# linq math

我有一个数字列表,我想获得下一个>=数字而不是我传递的数字,但是当我将值更大的值传递给列表中的最大值时会出现问题.例如,当我通过41并且列表中最大的是40时它将不起作用所以我希望它返回40.

var numbers = new[] {30, 20, 40};
Run Code Online (Sandbox Code Playgroud)

我希望它的工作方式如下:

numbers.GetNearest(45) -> 40
numbers.GetNearest(40) -> 40
numbers.GetNearest(31) -> 40
numbers.GetNearest(30) -> 30
numbers.GetNearest(29) -> 30
numbers.GetNearest(1) -> 20
Run Code Online (Sandbox Code Playgroud)

这有可能单独使用LINQ,还是有任何众所周知的算法?

我现在拥有的是:

numbers.OrderBy(n => n).FirstOrDefault(n => n >= minute)
Run Code Online (Sandbox Code Playgroud)

但是当我传递大于40的值时,它不起作用

我不想要最接近的数字,但是下一个数字>=不是我通过的数字,但是对于某些大于列表中最大数字的数字将不起作用,所以我想返回最后一个.

fub*_*ubo 5

用这个特殊情况定义 DefaultIfEmpty()

var numbers = new[] { 30, 20, 40 };
Array.Sort(numbers);
int result = numbers.Where(n => n >= minute).DefaultIfEmpty(numbers.Last()).First();
Run Code Online (Sandbox Code Playgroud)

测试用例:https://dotnetfiddle.net/nIEsRO

  • 答案是[DefaultIfEmpty](https://docs.microsoft.com/en-us/dotnet/api/system.linq.queryable.defaultifempty?view=netframework-4.7.2).有一个`Array.Sort`这一事实是无关紧要的. (2认同)