Какой самый эффективный способ объединить два List (Of String)? - PullRequest
24 голосов
/ 16 марта 2010

Допустим, у меня есть:

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 ]

34 голосов
/ 16 марта 2010

Я думаю

los1.AddRange(los2)
16 голосов
/ 16 марта 2010

Если вы просто хотите увидеть последовательность из двух списков, используйте метод Enumerable.Concat.

Dim combined = los1.Concat(los2)

Это вернет IEnemurable(Of String), который содержит все элементы в los1 и los2. Он не выделит огромную новую коллекцию, но вместо этого будет перебирать 2 отдельные коллекции.

7 голосов
/ 16 марта 2010

Ответ 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.

1 голос
/ 16 марта 2010

Union () потенциально, если вам нужен отдельный список записей (я полагаю, он делает только отдельные), это еще одна альтернатива.

...