2016-11-18 449 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

相关问题