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

Posted

技术标签:

【中文标题】从 int 列表中获取最大最接近的数字【英文标题】:Get maximum closest number from int list 【发布时间】:2022-01-16 17:19:08 【问题描述】:

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

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

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

场景 1: 如果我发送一个小于或等于 1000 的值进行检查,它应该返回 1000

场景 2: 如果我发送一个 1001 - 3000 之间的值进行检查,它应该返回 3000

场景 3: 如果我发送一个介于 3001 - 5500 之间的值进行检查,它应该返回 5500

场景 4: 如果我发送一个介于 5501 - 7000 之间的值进行检查,它应该返回 7000

场景 5: 如果我发送一个高于 7000 的值进行检查,它应该什么也不返回。

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

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

【问题讨论】:

请不要定义任何内容。你的意思是null @Llama 是的。 null 没关系:) 看起来您可以从 maxCheckPoint.Where(num =&gt; num &gt; whatever).Min() 开始并从那里改进它。你尝试了什么? minimal reproducible example?你的问题在哪里? 【参考方案1】:

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

【讨论】:

【参考方案2】:

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

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);

【讨论】:

以上是关于从 int 列表中获取最大最接近的数字的主要内容,如果未能解决你的问题,请参考以下文章

获取列表中某个给定数字的3个最接近的值?

从字符串和整数的元组,得到元组内最接近给定值的数字

我有一个数字,计算离这个数字最接近的三个数字

数字择优( 计算一个数与一组数字中的哪一个数字大小最接近)

删除列表中彼此接近的数字

当我从参数接收到 Iterable 时,如何使用带有 java8 的 Lamba 表达式从给定值中找到最接近的数字? [复制]