从 int 列表中获取最大最接近的数字

Get maximum closest number from int list

我有如下号码列表,我应该检查条件以获得最合适的匹配。

List<int> numbers= new List<int>();
numbers.Add(1000);
numbers.Add(3000);
numbers.Add(5500);
numbers.Add(7000);

如果我发送一个值来检查它应该像下面的例子那样检查

场景一: 如果我发送一个小于或等于 1000 的值来检查,它应该 return 1000

场景二: 如果我发送一个 1001 - 3000 之间的值来检查,它应该 return 3000

场景 3: 如果我发送一个 3001 - 5500 之间的值来检查,它应该 return 5500

场景 4: 如果我发送一个 5501 - 7000 之间的值来检查,它应该 return 7000

场景 5: 如果我发送一个超过 7000 的值来检查,它应该 return 没有。

我可以用 Linq 做到这一点吗?或者最有效的方法是什么?

更新:maxCheckPoint中的数字是动态的,可以是任意值。所以我们不能硬编码和检查

您可以使用 LINQ 执行此操作:

int input = 1000;
int? result = numbers
    .OrderBy(n => n) // get the numbers in ascending order
    .SkipWhile(n => n < input) // skip until the remaining set >= input
    .Cast<int?>() // cast to nullable int
    .FirstOrDefault(); // take the first or default entry (if no items remain, it will be null)

好吧,为时已晚,我的解决方案远非完美,但是:

int number = 400; //imput number
        int closest = numbers.Aggregate((x, y) => Math.Abs(x - number) < Math.Abs(y - number) ? x : y); // searching the closer one           
        int compare;
        try{
         if (numbers.IndexOf(closest) != 0)
            {
                compare = Math.Max(closest, numbers[numbers.IndexOf(closest) + 1]); // if it's not 0th and last
            }
            else
            { compare = closest; // if closest with index 0}
        }// check which closest number is bigger 
        catch{            
             compare = closest; // if closest is last
        }
Console.WriteLine(compare);