我会避免循环并使用 LINQ。这就是我要做的:
Dim array As String() = { "Team1", "Team2", "Team3", "Team4", "Team5" }
Dim working = array
If working.Length Mod 2 = 1 Then
working = working.Concat({ "Bye" }).ToArray()
End If
Dim output = _
working.Where(Function (x, n) n Mod 2 = 0) _
.Zip(working.Where(Function (x, n) n Mod 2 = 1), _
Function (x1, x2) String.Format("{0} vs {1}", x1, x2)) _
.ToArray()
这给出了:
使用 LINQ 执行此操作的另一种方法是:
Dim output = _
working _
.Select(Function (x, n) New With { .Team = x, .Group = n \ 2 }) _
.GroupBy(Function (x) x.Group, Function (x) x.Team) _
.Select(Function (xs) String.Join(" vs ", xs)) _
.ToArray()
有 8 个团队:
Team1 vs Team2
Team3 vs Team4
Team5 vs Team6
Team7 vs Team8
3 支队伍:
Team1 vs Team2
Team3 vs Bye
拥有 10,001 个团队:
Team1 vs Team2
Team3 vs Team4
Team5 vs Team6
...
Team9997 vs Team9998
Team9999 vs Team10000
Team10001 vs Bye
如果你需要它作为一个字符串,而不是一个数组,那么就这样做:
Dim text = String.Join(", ", output)
这给了你这种东西:
Team1 vs Team2、Team3 vs Team4、Team5 vs Team6、Team7 vs Team8、Team9 vs Team10、Team11 vs Team12、Team13 vs Team14、Team15 vs Team16、Team17 vs Bye