Vb.net 如何加入跳过最后2个元素的字符串列表

Vb.net 如何加入跳过最后2个元素的字符串列表,vb.net,Vb.net,我正在尝试加入字符串列表。我有一个字符串列表lstItem={“a”、“b”、“c”、“2”}。我正在寻找一种从列表中删除最后2个元素的方法,以便我的预期输出看起来像str1=“a b” 我试过一种方法 我使用了.take()方法-String.Join(“,lstItem.take(函数(x)if(x.Equals(lstItem(lstItem.Count-1)),lstItem(lstItem.Count-1),if(x.Equals(lstItem(lstItem.Count-2),ls

我正在尝试加入字符串列表。我有一个字符串列表
lstItem={“a”、“b”、“c”、“2”}
。我正在寻找一种从列表中删除最后2个元素的方法,以便我的预期输出看起来像
str1=“a b”

我试过一种方法

  • 我使用了
    .take()
    方法-
    String.Join(“,lstItem.take(函数(x)if(x.Equals(lstItem(lstItem.Count-1)),lstItem(lstItem.Count-1),if(x.Equals(lstItem(lstItem.Count-2),lstItem.Count-2,”))

  • 如果您想使用Linq,可以执行以下操作:

    str1 = String.Join(" ", lstItem.Reverse().Skip(2).Reverse());
    

    这样做的目的是反转
    lstItem
    中的元素,跳过前2个(实际上是最后2个),再次反转,使其回到原始顺序,最后用一个空格字符连接字符串。

    如果要使用Linq,可以执行以下操作:

    str1 = String.Join(" ", lstItem.Reverse().Skip(2).Reverse());
    
    这样做的目的是反转
    lstItem
    中的元素,跳过前2个(实际上是最后2个),再次反转,使其回到原始顺序,最后用一个空格字符连接字符串。

    Dim str=String.join(“,lstItem.Take(lstItem.Count-2))
    
    Dim str=String.Join(“,lstItem.Take(lstItem.Count-2))
    
    具有专用数据结构的替代方法,可用于可枚举,因为可枚举/集合只迭代一次

    Dim list = { "one","two","three","four" }
    
    Dim result = list.Aggregate(
        (Separator:= " ", Builder:= new StringBuilder(), Items:= new List(Of Integer)()), 
        Function(composer, item)
            composer.Builder.Append(item).Append(composer.Separator)
            composer.Items.Add(item.Length + composer.Separator.Length)
            Return composer
        End Function,
        Function(composer)
            Dim lengthToCut = composer.Separator.Length + composer.Items.Take(2).Sum()
            composer.Builder.Length -= Math.Min(lengthToCut, composer.Builder.Length)
            Return  composer.Builder.ToString()
        End Function
    )
    
    result.Should().Be("one two") ' Pass Ok
    

    具有专用数据结构的替代方法,可用于可枚举,因为可枚举/集合只迭代一次

    Dim list = { "one","two","three","four" }
    
    Dim result = list.Aggregate(
        (Separator:= " ", Builder:= new StringBuilder(), Items:= new List(Of Integer)()), 
        Function(composer, item)
            composer.Builder.Append(item).Append(composer.Separator)
            composer.Items.Add(item.Length + composer.Separator.Length)
            Return composer
        End Function,
        Function(composer)
            Dim lengthToCut = composer.Separator.Length + composer.Items.Take(2).Sum()
            composer.Builder.Length -= Math.Min(lengthToCut, composer.Builder.Length)
            Return  composer.Builder.ToString()
        End Function
    )
    
    result.Should().Be("one two") ' Pass Ok
    

    还有呢?只是用C代码来开发工作流。添加Uipath标记,以便在Uipath中使用与此相关的任何方法的人都可以回答:好的,您不应该添加与您的问题无关的标记。如果您的问题与标签所涉及的技术无关,则与您的问题无关。@John,请注意,
    SkipLast
    仅在.NET Core中受支持,而不是.NET Framework 4.8或更早版本。@jmchiliney这就是为什么我没有将其作为答案的部分原因,因为它是否适用于OP尚不清楚。另外,那怎么办?只是用C代码来开发工作流。添加Uipath标记,以便在Uipath中使用与此相关的任何方法的人都可以回答:好的,您不应该添加与您的问题无关的标记。如果您的问题与标签所涉及的技术无关,则与您的问题无关。@John,请注意,
    SkipLast
    仅在.NET Core中受支持,而不是.NET Framework 4.8或更早版本。@jmchiliney这就是为什么我没有将其作为答案的部分原因,因为它是否适用于OP尚不清楚。