我试图找出使用存储在List中的两个其他数字之间的任何n在整数列表中找到最接近的值ROUNDED DOWN的最佳方法.在这种情况下的所有整数将始终是未签名的,以防有帮助.
假设如下:
Math.Abs)例如:
List<int> numbers = new List<int>() { 0, 2000, 4000, 8000, 8500, 9101, 10010 };
int myNumber = 9000;
int theAnswer; // should be 8500
for (int i = 0; i < numbers.Count; i++) {
if (i == numbers.Count - 1) {
theAnswer = numbers[i];
break;
} else if (myNumber < numbers[i + 1]) {
theAnswer = numbers[i];
break;
}
}
Run Code Online (Sandbox Code Playgroud)
前面的代码示例没有任何缺陷.
有更好的更简洁的方式吗?
过滤列表获取所有小于 的值myNumber并返回最后一个:
theAnswer = numbers.Where(x => x <= myNumber ).Last();
Run Code Online (Sandbox Code Playgroud)
您可以使用List <T> .BinarySearch而不是按顺序枚举列表元素.
List<int> numbers = new List<int>() { 0, 2000, 4000, 8000, 8500, 9101, 10010 };
int myNumber = 9000;
int r=numbers.BinarySearch(myNumber);
int theAnswer=numbers[r>=0?r:~r-1];
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
647 次 |
| 最近记录: |