1. ホーム
  2. c#

[解決済み】2つ(またはそれ以上)のリストを1つに統合する(C# .NETで

2022-02-14 01:31:05

質問

.NETでC#を使用して、2つ以上のリストを1つのリストに変換することは可能でしょうか?

例えば

public static List<Product> GetAllProducts(int categoryId){ .... }
.
.
.
var productCollection1 = GetAllProducts(CategoryId1);
var productCollection2 = GetAllProducts(CategoryId2);
var productCollection3 = GetAllProducts(CategoryId3);

解決方法は?

LINQを使用することができます。 Concat ToList メソッドを使用します。

var allProducts = productCollection1.Concat(productCollection2)
                                    .Concat(productCollection3)
                                    .ToList();

これを行うには、より効率的な方法があることに注意してください。上記の方法は、基本的にすべてのエントリをループして、動的にサイズ調整されたバッファを作成します。最初からサイズを予測することができるので、このような動的なサイズ調整は必要ありません。 できる を使用します。

var allProducts = new List<Product>(productCollection1.Count +
                                    productCollection2.Count +
                                    productCollection3.Count);
allProducts.AddRange(productCollection1);
allProducts.AddRange(productCollection2);
allProducts.AddRange(productCollection3);

( AddRange は特殊なケースで ICollection<T> を使用すると、効率的です)。

でも、どうしても必要なとき以外は、この方法はとらない方がいいと思います。