Что самый эффективный путь состоит в том, чтобы объединить два Списка (Строки)?

Скажем, я имею:

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 платформы.

26
задан Jason Towne 16 March 2010 в 20:26
поделиться

4 ответа

Я думаю

los1.AddRange(los2)
35
ответ дан 28 November 2019 в 06:40
поделиться

Ответ JaredPar даст вам объект, который будет нумеровать оба списка. Если вам действительно нужен объект List (Of String) , содержащий эти значения, это очень просто:

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

EDIT : Вы знаете, просто потому, что вы используете. 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.

8
ответ дан 28 November 2019 в 06:40
поделиться

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

1
ответ дан 28 November 2019 в 06:40
поделиться

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

Dim combined = los1.Concat(los2)

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

17
ответ дан 28 November 2019 в 06:40
поделиться
Другие вопросы по тегам:

Похожие вопросы: