簡體   English   中英

在Visual Basic中串聯數組的元素

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM