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()?
答
上最低的绝对值
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;
}
你的调用.First()。所以你只会得到1结果。 – Botonomous
并将它分配给一个'int'以便... – djv