web-dev-qa-db-ja.com

2つのList(Of String)を組み合わせる最も効率的な方法は何ですか?

私が持っているとしましょう:

_Dim los1 as New List(Of String)
los1.Add("Some value")

Dim los2 as New List(Of String)
los2.Add("More values")
_

2つを1つのList(Of String)に組み合わせる最も効率的な方法は何ですか?

編集:私は誰もが提供したソリューションを気に入っていますが、おそらく.NET 2.0フレームワークを使用して立ち往生していることについても言及したはずです。

28
Jason Towne

おもう

los1.AddRange(los2)
34
Javier

2つのリストのシーケンスを表示するだけの場合は、_Enumerable.Concat_メソッドを使用します。

_Dim combined = los1.Concat(los2)
_

これは、_los1_および_los2_のすべての要素を含むIEnemurable(Of String)を返します。それは巨大な新しいコレクションを割り当てませんが、代わりに2つの別々のコレクションを反復します。

16
JaredPar

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
Dan Tao

Union()は、エントリの個別のリストが必要な場合(別の方法でのみ実行されると思います)、別の代替手段となる可能性があります。

1
Brian Mains