簡體   English   中英

C#在最接近給定數字的數組中查找所有值

[英]C# Find all values in an array closest to a given number

給定:

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()嗎?

使用最低絕對值分組

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

只是添加到此。 如果您想使用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;
        }

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM