从给定的整数数组中查找最接近的整数值(向下舍入)

Jef*_*son 1 c#

我试图找出使用存储在List中的两个其他数字之间的任何n在整数列表中找到最接近的值ROUNDED DOWN的最佳方法.在这种情况下的所有整数将始终是未签名的,以防有帮助.

假设如下:

  • 列表始终从0开始
  • 列表始终按ASC排序
  • 列表中的所有整数都是未签名的(不需要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)

前面的代码示例没有任何缺陷.

更好的更简洁的方式吗?

Gio*_*sos 5

过滤列表获取所有小于 的值myNumber并返回最后一个:

theAnswer = numbers.Where(x => x <= myNumber ).Last();
Run Code Online (Sandbox Code Playgroud)


use*_*407 5

您可以使用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)