两个值之间的距离

Dr.*_*ail 4 c# linq

我有一个阵列

int[] Values = new int[] { 5, 43, 45, 25, 16, 89, 65, 36, 62 };
Run Code Online (Sandbox Code Playgroud)

目前我正在计算所有值之间的最大距离 84 = 89 - 5

int MaxDistance = Values.SelectMany((a) => Values.Select((b) => Math.Abs(a - b))).Max();
Run Code Online (Sandbox Code Playgroud)

现在我想计算最小距离 2 = 45 - 43

@ ycsun的意见 - 这不起作用

int MinDistancee = Values.SelectMany((ia, a) => Values.Select((ib, b) => ib == ia ? int.MaxValue : Math.Abs(a - b))).Min();
Run Code Online (Sandbox Code Playgroud)

juh*_*arr 6

试试这个

int MinDistance = Values.SelectMany(
    (a, i) => Values.Skip(i + 1).Select((b) => Math.Abs(a - b))).Min();
Run Code Online (Sandbox Code Playgroud)

这样可以确保不会计算同一索引处的数字或两次不同索引处的一组数字之间的差异.基本上这使用SelectMany包含索引的重载,然后你只想通过使用当前索引之后的所有数字来区别Skip.

应该注意的是使用for循环形式的解决方案

for(int i = 0; i < Values.Length - 1; i++)
    for(int j = i + 1; j < Values.Length; j++)
Run Code Online (Sandbox Code Playgroud)

虽然会更高效.

但有一点需要注意,如果你有负数.那么a-b对比的绝对值就会有所不同b-a.在这种情况下,您需要先对列表进行排序,以确保差异始终a为较大的数字.