在列表C#中查找下一个最高和最低的数字

Sta*_*ros 1 c#

我有一个数字列表,如果我要查找的数字不在列表中,我希望能够找到我要的数字上方和下方的列表中的下一个值。

double index = 5;
List<double> list = new List<double>() { 1, 2, 3, 7, 8, 9, };
//do code to find next highest/lowest
double higher = 7;
double lower = 3;
Run Code Online (Sandbox Code Playgroud)

例如,因为5本身不在列表中,所以我希望它返回上下两个都最接近5的下一个项目。所以在这种情况下3和7

mac*_*ura 5

原始版本

您可以使用List的Sort()方法,然后使用LINQ FirstOrDefault()LastOrDefault()

List<double> numbers = new List<double>()
{
    1, 2, 3, 7, 8, 9
};

double input = 5;

numbers.Sort();

double nextHighest = numbers.FirstOrDefault(x => x > input);
double nextLowest = numbers.LastOrDefault(x => x < input);
Run Code Online (Sandbox Code Playgroud)

更好的版本编辑这在两种情况下都无法正常工作

最初,我建议将其作为更有效的解决方案,但这不适用于给定输入之前的数字。它仅适用于在给定输入之后查找数字。

由于您正在使用List<T>,因此可以提高效率,有一种Find()方法可以接受谓词:

List<double> numbers = new List<double>()
{
    1, 2, 3, 7, 8, 9
};

double input = 5;

numbers.Sort();

double nextHighest = numbers.Find(x => x > input);
Run Code Online (Sandbox Code Playgroud)

找到匹配项后,它将立即退出循环(而LastOrDefault()必须迭代整个collection

这里小提琴