[英]Concatenating elements of an array in Visual Basic
嘿,我遇到了一個麻煩的問題,基本上我有一個數組Dim array() as String = {"Team1, "Team2", "Team3", "Team4", "Team5" }
我的目標是將偶數對中的字符串與字符串“ vs”連接起來,並且如果存在奇數對,則將字符串中的奇數元素與字符串“ Bye”連接起來, 所以我想讓我的輸出看起來像這樣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
擁有10001個團隊:
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,您應該循環到一半。 這在某種程度上取決於球隊數量的奇/偶。 連接時,請使用loop參數和參數加1來訪問數組元素。 例:
dim game as string = teams(i) & teams(i + 1)
您可以進行for循環並使用步驟2。使用StringBuilder組裝最終字符串。
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"
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.