我有一个数字列表,如果我要查找的数字不在列表中,我希望能够找到我要的数字上方和下方的列表中的下一个值。
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
您可以使用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)
在这里小提琴
| 归档时间: |
|
| 查看次数: |
363 次 |
| 最近记录: |