List<T>.Insert() / Count
| 対応: | C# 2.0(2005) |
|---|
リストの指定した位置に要素を挿入する『Insert()』と、リストの現在の要素数を取得する『Count』プロパティです。
構文
using System.Collections.Generic; // 指定したインデックスの位置に要素を挿入します。 list.Insert(int index, T item) // コレクションのすべての要素を指定したインデックスの位置に挿入します。 list.InsertRange(int index, IEnumerable<T> collection) // リストの現在の要素数を取得します。 list.Count
メンバー一覧
| メンバー | 概要 |
|---|---|
| Insert(int index, T item) | 指定したインデックスに要素を挿入します。それ以降の要素は後ろにシフトされます。 |
| InsertRange(int index, IEnumerable<T> collection) | 指定したインデックスにコレクション全体を挿入します。 |
| Count | リストの現在の要素数を整数で返します。要素を追加・削除するたびに自動的に更新されます。 |
サンプルコード
Insert() で指定した位置に要素を挿入します。先頭に挿入する場合はインデックス 0 を指定します。
Program.cs
using System;
using System.Collections.Generic;
List<string> ranking = new List<string> { "五条悟", "両面宿儺", "虎杖悠仁" };
Console.WriteLine($"要素数: {ranking.Count}"); // 要素数: 3
ranking.Insert(1, "伏黒恵");
Console.WriteLine(string.Join(", ", ranking));
Console.WriteLine($"要素数: {ranking.Count}"); // 要素数: 4
ranking.Insert(0, "釘崎野薔薇");
Console.WriteLine(string.Join(", ", ranking));
dotnet run 要素数: 3 五条悟, 伏黒恵, 両面宿儺, 虎杖悠仁 要素数: 4 釘崎野薔薇, 五条悟, 伏黒恵, 両面宿儺, 虎杖悠仁
InsertRange() で複数要素をまとめて挿入する
InsertRange() を使うと、コレクション全体を指定位置にまとめて挿入できます。1件ずつ Insert() を呼ぶより効率的です。
InsertRangeSample.cs
using System;
using System.Collections.Generic;
List<int> numbers = new List<int> { 1, 5 };
numbers.InsertRange(1, new int[] { 2, 3, 4 });
Console.WriteLine(string.Join(", ", numbers)); // 1, 2, 3, 4, 5
List<string> words = new List<string> { "始め", "終わり" };
words.InsertRange(1, new string[] { "中1", "中2", "中3" });
Console.WriteLine(string.Join(", ", words)); // 始め, 中1, 中2, 中3, 終わり
Console.WriteLine($"要素数: {words.Count}"); // 要素数: 5
dotnet run 1, 2, 3, 4, 5 始め, 中1, 中2, 中3, 終わり 要素数: 5
Count を使った繰り返し処理
Count は要素数を返す読み取り専用プロパティです。要素を追加・削除するたびに自動的に更新されます。for ループや容量チェックによく使われます。
CountSample.cs
using System;
using System.Collections.Generic;
List<int> evens = new List<int>();
for (int i = 2; i <= 10; i += 2)
{
evens.Add(i);
}
Console.WriteLine($"偶数の個数: {evens.Count}"); // 偶数の個数: 5
for (int i = 0; i < evens.Count; i++)
{
Console.Write(evens[i] + " ");
}
Console.WriteLine();
dotnet run 偶数の個数: 5 2 4 6 8 10
よくあるミス
よくあるミス: List<T> に Length プロパティはない
配列には Length プロパティがありますが、List<T> には Length がありません。配列と混同して Length を使うとコンパイルエラーになります。
using System.Collections.Generic;
// NG: List<T> に Length はない → コンパイルエラー
List<string> items = new List<string> { "a", "b", "c" };
// Console.WriteLine(items.Length); // CS1061: 'List<string>' に 'Length' の定義がありません。
修正後は次の通りです。
using System;
using System.Collections.Generic;
// OK: Count を使う
List<string> items = new List<string> { "a", "b", "c" };
Console.WriteLine(items.Count); // 3
dotnet run 3
また、Insert() の index に Count より大きい値を指定すると ArgumentOutOfRangeException が発生します。末尾に追加したい場合は Insert(Count, item) ではなく Add(item) を使います。
概要
Count は配列の Length に相当するプロパティです。List<T> には Length プロパティはないため、配列と混同して Length を呼び出すとコンパイルエラーになります。リストの要素数は必ず Count を使ってください。
Insert() は指定位置以降の要素をシフトする必要があるため、リストが大きいほど処理コストが上がります。頻繁に先頭や途中への挿入が必要な場合は LinkedList<T> の使用も検討してください。
要素の検索や判定には『List<T>.Contains() / IndexOf()』を参照してください。
記事の間違いや著作権の侵害等ございましたらお手数ですがこちらまでご連絡頂ければ幸いです。