C# Linq,在 List 中找到两个数字之间的最小值
本文关键字:两个 数字 最小值 之间 Linq List int | 更新日期: 2023-09-27 18:34:50
我知道这个问题以前被问过,但其他问题只是关于找到最接近的。我不想这样。我需要两个值之间的最低值。例如,如果这是列表:如何使用 LINQ 从 List
List<int> numbers = new List<int>();
numbers.Add(2);
numbers.Add(5);
numbers.Add(7);
numbers.Add(10)
要查找的数字是 9,我希望它返回 7 项,而不是 10,即使它更接近。此代码找到最接近的,但是每当我更改它以查找范围内的最小值时,对于输入的数字是列表中的数字之一(例如 7 或 10(的其他情况,它都会中断:
list.Aggregate((x,y) => Math.Abs(x-number) < Math.Abs(y-number) ? x : y);
如何更改该代码以支持我需要执行的操作?
我知道我可以使用二进制搜索...我不想使用它,如果可能的话,我想使用 linq。
var numbers = new List<int> { 2, 5, 7, 10 };
var seven = numbers.Where(n => n <= 9).Max();
如果您必须考虑列表不会有任何数字最接近的情况,则代码如下所示:
private static int? GetClosest(List<int> numbers, int number)
{
var shorterEnumerable = numbers.Where(x => x <= number);
var shorterArray = shorterEnumerable as int[] ?? shorterEnumerable.ToArray();
if (shorterArray.Length > 1)
return shorterArray.Max();
return null;
}
即使@danielnixon答案也很好,这使用 agregate
int? closerLow = (int?) list.Aggregate((x,y) => Math.Abs(x-number) < Math.Abs(y-number)
? (x > number ? y : x )
: (y > number ? x : y));
if (closerLow > number) closerLow = null;