在 Visual Basic 中连接数组的元素
Concatenating elements of an array in Visual Basic
嘿,我 运行 遇到了一个麻烦的问题,基本上我有一个数组 Dim array() as String = {"Team1, "Team2", "Team3", "Team4", "Team5" }
我的目标是连接偶数对的字符串与字符串 "vs" AND 如果有奇数对连接数组中的奇数元素使用字符串 "Bye" So 我试图让我的输出看起来像这样 Team1 vs Team2, Team3 vs Team4, Team5 vs Bye
我知道我需要使用循环,但是我对如何将原始数组中未知数量的元素变成偶数对 2 以便连接字符串感到困惑!任何帮助将非常感激!
我会避免循环并使用 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
您可以通过添加 Step 参数将 For 循环递增 2。但不是循环到 Count - 1,你应该循环到它的一半。这多少取决于odd/evenness的队伍数量。串联时,使用循环参数和参数加1来访问数组元素。示例:
dim game as string = teams(i) & teams(i + 1)
您可以制作一个 for 循环并使用步骤 2。使用 StringBuilder 以便 assemble 最终字符串。
Dim array() as String = { "Team1", "Team2", "Team3", "Team4", "Team5" }
Dim sb As New StringBuilder()
For i = 0 To array.Length - 1 Step 2
Dim s1 As String = array(i)
Dim s2 As String = If(i + 1 < array.Length, array(i + 1), "Bye")
sb.Append(s1).Append(" vs ").Append(s2).Append(", ")
Next
If sb.Length > = 2 Then
sb.Length -= 2
End If
Dim result = sb.ToString() ' ==> "Team1 vs Team2, Team3 vs Team4, Team5 vs Bye"
嘿,我 运行 遇到了一个麻烦的问题,基本上我有一个数组 Dim array() as String = {"Team1, "Team2", "Team3", "Team4", "Team5" }
我的目标是连接偶数对的字符串与字符串 "vs" AND 如果有奇数对连接数组中的奇数元素使用字符串 "Bye" So 我试图让我的输出看起来像这样 Team1 vs Team2, Team3 vs Team4, Team5 vs Bye
我知道我需要使用循环,但是我对如何将原始数组中未知数量的元素变成偶数对 2 以便连接字符串感到困惑!任何帮助将非常感激!
我会避免循环并使用 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
您可以通过添加 Step 参数将 For 循环递增 2。但不是循环到 Count - 1,你应该循环到它的一半。这多少取决于odd/evenness的队伍数量。串联时,使用循环参数和参数加1来访问数组元素。示例:
dim game as string = teams(i) & teams(i + 1)
您可以制作一个 for 循环并使用步骤 2。使用 StringBuilder 以便 assemble 最终字符串。
Dim array() as String = { "Team1", "Team2", "Team3", "Team4", "Team5" }
Dim sb As New StringBuilder()
For i = 0 To array.Length - 1 Step 2
Dim s1 As String = array(i)
Dim s2 As String = If(i + 1 < array.Length, array(i + 1), "Bye")
sb.Append(s1).Append(" vs ").Append(s2).Append(", ")
Next
If sb.Length > = 2 Then
sb.Length -= 2
End If
Dim result = sb.ToString() ' ==> "Team1 vs Team2, Team3 vs Team4, Team5 vs Bye"