【C#】複数のリスト ( List ) を結合する3つの方法

C#で複数のリストを結合する3つの方法

本記事では2つ以上のリスト (List) を結合し、1つのリストにする方法を紹介します。

List の初期化方法などに関しては、以下の記事で紹介しています。

【C#】配列、List、Dictionaryの初期化方法まとめ【C#】配列, List, Dictionary の初期化方法まとめ

リストを結合する3つの方法

1. foreach を使用するリストの結合

1つ目はforeachを使ってリストを結合します。

以下のコードではlistBを foreach で回し、そこで取得できる要素を listAに追加しています。

using System;
using System.Collections.Generic;
 
public class Sample
{
    public static void Main()
    {
        var listA = new List<int>() { 1, 2, 3 };
        var listB = new List<int>() { 4, 5, 6 };

        foreach (var listBItem in listB)
        {
            // listA に listB の要素を追加
            listA.Add(listBItem);
        }

        // ForEach を使うこちらの方法も可能
        // listB.ForEach(listBItem => listA.Add(listBItem));

        Console.WriteLine(String.Join(",", listA));
        // 出力 -> 1,2,3,4,5,6
    }
}

ForEachを使いコード1行で結合処理を行うことも可能です。

listB.ForEach(listBItem => listA.Add(listBItem));

2. List<T>.AddRange を使用するリストの結合

2つ目は List<T>.AddRangeを使って結合する方法です。

[リストA].AddRange([リストB])とすることで、リストAの末尾にリストBが追加されます。

using System;
using System.Collections.Generic;
 
public class Sample
{
    public static void Main()
    {
        var listA = new List<int>() { 1, 2, 3 };
        var listB = new List<int>() { 4, 5, 6 };
        
        // listA の末尾に listB を追加
        listA.AddRange(listB);
        
        Console.WriteLine(String.Join(",", listA));
        // 出力 -> 1,2,3,4,5,6
    }
}

結合してもリスト内の順番は維持され、リストBの内容が変更されることはありません。

3. Enumerable.Concat() を使用するリストの結合

3つ目はLINQ クラスのメソッドであるEnumerable.Concat() を使って結合する方法です。

LINQの使用にはコード内で using System.Linq;の宣言が必要です。

using System;
using System.Linq;
using System.Collections.Generic;
 
public class Sample
{
    public static void Main()
    {
        var listA = new List<int>() { 1, 2, 3 };
        var listB = new List<int>() { 4, 5, 6 };

        List<int> listC = listA.Concat(listB).ToList();

        Console.WriteLine(String.Join(",", listC));
        // 出力 -> 1,2,3,4,5,6
    }
}

上記のコードではlistA listB を結合し、それを listC に代入しています。

LINQクラスに関しては以下の記事で詳しく紹介しています。

すべての方法に当てはまることですが、型の異なるリスト同士は結合できません。異なる型を結合しようとするとコンパイルエラーになります。

var listA = new List<int>() { 1, 2, 3 };
var listB = new List<string>() { "4", "5", "6" };

// コンパイルエラー:int 型のリストに string 型のリストは結合できない
listA.AddRange(listB);

参考資料

関連記事

【C#】要素に重複のないリストを作成する3つの方法【C#】要素に重複のないリストを作成する3つの方法【List】