如何使用LINQ选择最小子序列?

use*_*324 6 linq

如果我有一系列高尔夫结果:

 -3, +5, -3, 0, +1, +8, 0, +6, +2, -8, +5
Run Code Online (Sandbox Code Playgroud)

我需要找到一个具有最小总和的三个相邻数字的序列.对于此示例,子序列将是:

 [-3, +5, -3]
 [+5, -3,  0]
 [-3,  0, +1]
 ... etc ...
 [+2, -8, +5]
Run Code Online (Sandbox Code Playgroud)

最小序列[-3, 0, +1]的总和为-2.

Tim*_*ter 5

您可以使用此LINQ查询:

int[] golfResult = { -3, +5, -3, 0, +1, +8, 0, +6, +2, -8, +5 };
var combinations = from i in Enumerable.Range(0, golfResult.Length - 2)
                   select new { 
                       i1 = golfResult[i], 
                       i2 = golfResult[i + 1], 
                       i3 = golfResult[i + 2], 
                   };
var min = combinations.OrderBy(x => x.i1 + x.i2 + x.i3).First();
int[] minGolfResult = { min.i1, min.i2, min.i3 }; // -3, 0, +1
Run Code Online (Sandbox Code Playgroud)

当然,您需要检查阵列中是否至少有三个结果.