List<T>への要素の追加
C#のList<T>に要素を追加する際、最も基本的な方法はAddメソッドを呼び出すことです。
var users = new List<string>();
users.Add("Alice");
users.Add("Bob");
しかし、もし追加したい要素が既に**別の配列(string[])やList<T>**にまとまっている場合、foreachループを使用してAddメソッドを何度も呼び出すのは非効率です。
string[] newUsers = { "Charlie", "David" };
// 従来のループ処理 (非効率)
foreach (var user in newUsers)
{
users.Add(user);
}
List<T>クラスは、このような「コレクションの全要素をまとめて(一括で)追加する」操作のために、AddRangeメソッドを提供しています。
AddRange(IEnumerable<T> collection) メソッド
AddRangeメソッドは、引数として渡されたコレクション(IEnumerable<T>)のすべての要素を、既存のリストの末尾に一度の操作で追加します。
collection: 追加したい要素が含まれるコレクション。T[](配列)や、別のList<T>などを渡すことができます。
AddRangeは、内部的にList<T>の容量(Capacity)を一度で最適に確保してから要素を追加するため、foreachループでAddを繰り返すよりもパフォーマンスが優れています。
コード例1:配列(T[])の要素を追加する
既存のList<string>(activeUsers)に、新しいユーザーの配列(newUsersArray)の内容をまとめて追加する例です。
using System;
using System.Collections.Generic;
public class AddRangeArrayExample
{
public static void Main()
{
// 1. 既存のリスト(初期要素)
var activeUsers = new List<string>
{
"Alice",
"Bob"
};
Console.WriteLine("--- 追加前 ---");
PrintList(activeUsers);
// 2. 追加したい要素の配列
string[] newUsersArray = { "Charlie", "David", "Eve" };
// 3. AddRange で配列の全要素をリストの末尾に一括追加
activeUsers.AddRange(newUsersArray);
Console.WriteLine("\n--- AddRange 実行後 ---");
PrintList(activeUsers);
}
// リストの内容を出力するヘルパーメソッド
private static void PrintList(List<string> list)
{
Console.WriteLine($"要素数: {list.Count}");
foreach (var item in list)
{
Console.Write($"[{item}] ");
}
Console.WriteLine();
}
}
出力結果:
--- 追加前 ---
要素数: 2
[Alice] [Bob]
--- AddRange 実行後 ---
要素数: 5
[Alice] [Bob] [Charlie] [David] [Eve]
コード例2:別のList<T>の要素を追加する
AddRangeの引数には、配列だけでなく、別のList<T>インスタンスも渡すことができます。
using System;
using System.Collections.Generic;
public class AddRangeListExample
{
public static void Main()
{
// 1. メインのスコアリスト
var mainScores = new List<int> { 100, 85 };
// 2. 追加したいスコアのリスト
var bonusScores = new List<int> { 90, 95 };
// 3. bonusScores の全要素を mainScores に追加
mainScores.AddRange(bonusScores);
Console.WriteLine("--- List<int> の AddRange 実行後 ---");
// string.Join を使ってカンマ区切りで出力
Console.WriteLine(string.Join(", ", mainScores));
}
}
出力結果:
--- List<int> の AddRange 実行後 ---
100, 85, 90, 95
まとめ
List<T>.AddRangeメソッドは、既存のリストに別の配列やリストの全要素を一括で追加するための、標準的で効率的な方法です。
foreachループでAddメソッドを個別に呼び出すよりもコードが簡潔になり、パフォーマンス上のメリットも大きいため、コレクション同士を結合する際にはAddRangeの使用が推奨されます。
