2016-11-18 451 views
0

C#找一個數組中最接近的所有值給出給定數量

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

+3

你的調用.First()。所以你只會得到1結果。 – Botonomous

+0

並將它分配給一個'int'以便... – djv

回答

2

上最低的絕對值

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

只需添加到這個使用分組。如果你想這樣做使用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; 
     } 
+1

提高效率! – djv

+0

謝謝你哥們:) – Swetha

相關問題