私が持っているとしましょう:
_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フレームワークを使用して立ち往生していることについても言及したはずです。
おもう
los1.AddRange(los2)
2つのリストのシーケンスを表示するだけの場合は、_Enumerable.Concat
_メソッドを使用します。
_Dim combined = los1.Concat(los2)
_
これは、_los1
_および_los2
_のすべての要素を含むIEnemurable(Of String)
を返します。それは巨大な新しいコレクションを割り当てませんが、代わりに2つの別々のコレクションを反復します。
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拡張と同じ方法で遅延実行を提供するのは難しいでしょう。
Union()は、エントリの個別のリストが必要な場合(別の方法でのみ実行されると思います)、別の代替手段となる可能性があります。