我有一个数组
int[] Values = new int[] { 5, 43, 45, 25, 16, 89, 65, 36, 62 };
目前我正在计算所有值之间的最大距离 84 = 89 - 5
int MaxDistance = Values.SelectMany((a) => Values.Select((b) => Math.Abs(a - b))).Max();
现在我想计算最小距离 2 = 45 - 43
@ycsun的评价-这不起作用
int MinDistancee = Values.SelectMany((ia, a) => Values.Select((ib, b) => ib == ia ? int.MaxValue : Math.Abs(a - b))).Min();
试试这个
int MinDistance = Values.SelectMany(
(a, i) => Values.Skip(i + 1).Select((b) => Math.Abs(a - b))).Min();
这样可以确保您不会两次计算相同索引处的数字或不同索引处的一组数字之间的差。基本上,这会使用SelectMany
包含索引的重载,然后您只想使用来处理当前索引之后的所有数字Skip
。
应该注意的是,使用for
以下形式的循环的解决方案
for(int i = 0; i < Values.Length - 1; i++)
for(int j = i + 1; j < Values.Length; j++)
会更有表现。
不过,请注意,如果您有负数。则绝对值a-b
与之间将存在差异b-a
。在这种情况下,您需要首先对列表进行排序,以确保差异始终a
与较大的数字相同。
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句