c# - 在特定条件下使用 LINQ 从列表中获取数字

标签 c# linq math

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

var numbers = new[] {30, 20, 40};

我希望它像这样工作:

numbers.GetNearest(45) -> 40
numbers.GetNearest(40) -> 40
numbers.GetNearest(31) -> 40
numbers.GetNearest(30) -> 30
numbers.GetNearest(29) -> 30
numbers.GetNearest(1) -> 20

这是否可以单独使用 LINQ,或者是否有任何众所周知的算法?

我现在拥有的是这样的:

numbers.OrderBy(n => n).FirstOrDefault(n => n >= minute)

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

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

最佳答案

DefaultIfEmpty() 定义特殊情况

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

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

关于c# - 在特定条件下使用 LINQ 从列表中获取数字,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/52552221/

相关文章:

c# - UWP 覆盖样式属性而不丢失其他属性定义

javascript - 单击按钮时防止默认值不随机工作

c# - 推荐一个扎实的.Net FTP库

c# - 无法查询 EF 对象上名为 "group"的属性

optimization - 解决 3d 多边形网格的最佳对齐问题

c# - 在离线 C# webforms 应用程序中使用 OpenStreetMap 数据

linq - 使用 LINQ 的分层数据总和?

c# - 如何创建正则表达式以匹配不包含 where 子句的 linq 语句?

Linux、改进的cal、shell编程

algorithm - 关联矩阵而不是邻接矩阵