我有一个数字列表,我想获得下一个>=数字而不是我传递的数字,但是当我将值更大的值传递给列表中的最大值时会出现问题.例如,当我通过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的值时,它不起作用
我不想要最接近的数字,但是下一个数字>=不是我通过的数字,但是对于某些大于列表中最大数字的数字将不起作用,所以我想返回最后一个.
用这个特殊情况定义 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