C# 查找数组中最接近给定数字的所有值

本文关键字:数字 查找 数组 最接近 | 更新日期: 2023-09-27 18:18:35

给定:

int[] myArray = new int[]{-8, -17, 12, 8, 16, -3, 7, 3};

查找数组中最接近 0 的所有值。

目前正在使用在网站上找到的另一个代码,但它只告诉我 1 个值。

int nearest = myArray.Select(p => new {Value = p, Difference = Math.Abs(p - searchValue)}).OrderBy(p => p.Difference).First().Value;

在当前情况下,-3 和 3 都最接近 0,但由于 -3 先出现,它只输出 -3。

有没有另一种方法可以做到这一点,它找到所有值而不仅仅是 First((?

C# 查找数组中最接近给定数字的所有值

只是为了补充一下。如果你想使用 O(n( 复杂性而不进行排序,那么你可以这样做:

 public List<int> GetClosestNumbers(int searchVal)
        {
            int[] myArray = new int[] { -8, -17, 12, 8, 16, -3, 7, 3 };
            int minimumDist = int.MaxValue;
            List<int> output = new List<int>();
            for (int i = 0; i < myArray.Length; i++)
            {
                var currentDistance = Math.Abs(myArray[i] - searchVal);
                if (currentDistance < minimumDist)
                {
                    minimumDist = currentDistance;
                    output.Clear();
                    output.Add(myArray[i]);
                }
                else if (minimumDist == currentDistance)
                {
                    output.Add(myArray[i]);
                }
            }
            return output;
        }

对最低绝对值使用分组

int[] result = myArray
    .OrderBy(i => Math.Abs(i - searchValue))
    .GroupBy(i => Math.Abs(i - searchValue))
    .First()
    .ToArray();