【问题标题】:Concatenating elements of an array in Visual Basic在 Visual Basic 中连接数组的元素
【发布时间】:2015-10-19 22:34:29
【问题描述】:

嘿,我遇到了一个麻烦的问题,基本上我有一个数组Dim array() as String = {"Team1, "Team2", "Team3", "Team4", "Team5" }

我的目标是将偶数对中的字符串与字符串“vs”AND连接起来,如果有奇数对将数组中的奇数元素与字符串“Bye”连接起来所以我试图让我的输出看起来像这样Team1 vs Team2, Team3 vs Team4, Team5 vs Bye

我知道我需要使用循环,但是我对如何将原始数组中未知数量的元素变成偶数对 2 以便我可以连接字符串感到困惑!任何帮助将非常感激!

【问题讨论】:

    标签: arrays vb.net string concatenation


    【解决方案1】:

    我会避免循环并使用 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

    【讨论】:

    • 这太棒了,除了我不知道会有一个 team1 team2 team3 team4 team5 可能有 500 或 5000 个团队,或者可能有 2 或 3 个团队,否则这看起来很棒,因为输出是正确
    • Linq 的酷用。我不知道Where 的这种过载。感谢您展示它。
    • @ChristianBartram - 无论有多少团队,这都很好。
    【解决方案2】:

    您可以创建一个 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"
    

    【讨论】:

    • 就是这样,非常感谢!我看到你是如何使用循环来获得最终结果的!
    【解决方案3】:

    您可以通过添加 Step 参数将 For 循环增加 2。但不是循环到 Count - 1,你应该循环到它的一半。这在一定程度上取决于团队数量的奇数/偶数。连接时,使用循环参数和参数加1来访问数组元素。示例:

    dim game as string = teams(i) & teams(i + 1)
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2014-06-06
      • 1970-01-01
      • 2016-07-29
      • 2017-06-21
      • 1970-01-01
      • 1970-01-01
      • 2011-11-03
      相关资源
      最近更新 更多