代码之家  ›  专栏  ›  技术社区  ›  Jason Towne

将两个列表(字符串)组合在一起最有效的方法是什么?

  •  23
  • Jason Towne  · 技术社区  · 15 年前

    假设我有:

    Dim los1 as New List(Of String)
    los1.Add("Some value")
    
    Dim los2 as New List(Of String)
    los2.Add("More values")
    

    把两者结合成一个整体最有效的方法是什么? List(Of String) ?

    编辑 :虽然我喜欢每个人提供的解决方案,但我可能还应该提到我一直在使用.NET 2.0框架。

    4 回复  |  直到 15 年前
        1
  •  32
  •   Javier    15 年前

    我想

    los1.AddRange(los2)
    
        2
  •  16
  •   basher    12 年前

    如果您只想查看两个列表的序列,请使用 Enumerable.Concat 方法。

    Dim combined = los1.Concat(los2)
    

    这将返回 IEnemurable(Of String) 其中包含 los1 los2 . 它不会分配一个巨大的新集合,而是迭代两个独立的集合。

        3
  •  7
  •   Dan Tao    15 年前

    Jaredpar的答案将为您提供一个对象,该对象将枚举两个列表。如果你真的想要 List(Of String) 对象 包含 这些值,简单的如下:

    Dim combined As New List(Of String)(los1.Concat(los2));
    

    编辑 :你知道,仅仅因为你在使用.NET 2.0并不意味着你不能滚动你自己版本的一些你个人认为有用的LINQ扩展方法。这个 Concat 方法尤其是在C中实现非常简单:

    public static class EnumerableUtils {
        public static IEnumerable<T> Concat<T>(IEnumerable<T> first, IEnumerable<T> second) {
            foreach (T item in first)
                yield return item;
    
            foreach (T item in second)
                yield return item;
        }
    }
    

    然后,请看这里:

    Dim los1 as New List(Of String)
    los1.Add("Some value")
    
    Dim los2 as New List(Of String)
    los2.Add("More values")
    
    Dim combined As New List(Of String)(EnumerableUtils.Concat(los2, los2))
    

    * 公平地说,这在C语言中要简单得多,因为 yield 关键字。它 能够 可以在vb.net中完成,但是以与linq扩展相同的方式提供延迟执行会更加棘手。

        4
  •  1
  •   Brian Mains    15 年前

    union()可能是另一种选择,如果您想要一个不同的条目列表(我认为它只做一个不同的列表)。