C#
 Computer >> コンピューター >  >> プログラミング >> C#

【C#】指定したインデックス位置にコレクションの要素をListへ一括挿入する方法

C#で既存のListに対して、別のコレクション(配列など)の要素を指定したインデックス位置にまとめて挿入したい場合は、List<T>クラスが提供するInsertRangeメソッドを使用します。

InsertRangeメソッドとは

InsertRange(int index, IEnumerable<T> collection)は、第1引数で指定したインデックス位置に、第2引数で渡したコレクションの全要素を一括で挿入するメソッドです。既存の要素は自動的に後ろへずらされるため、要素を1つずつInsertするよりも効率的に処理できます。

なお、indexが0未満またはListの要素数を超える場合はArgumentOutOfRangeExceptionがスローされる点に注意してください。

サンプルコード①:文字列の配列を挿入する例

using System;
using System.Collections.Generic;

public class Demo {
    public static void Main(String[] args) {
        string[] strArr = { "John", "Tom", "Kevin", "Mark", "Gary" };
        List<string> list = new List<string>(strArr);

        Console.WriteLine("Listの要素...");
        foreach (string str in list) {
            Console.WriteLine(str);
        }

        strArr = new string[] { "Demo", "Text" };
        Console.WriteLine("指定位置に新しい要素を挿入...");
        list.InsertRange(3, strArr);

        foreach (string res in list) {
            Console.WriteLine(res);
        }
    }
}

実行結果

Listの要素...
John
Tom
Kevin
Mark
Gary
指定位置に新しい要素を挿入...
John
Tom
Kevin
Demo
Text
Mark
Gary

この例では、5つの文字列を格納したListのインデックス3(4番目)の位置に、「Demo」「Text」の2要素を挿入しています。元々インデックス3以降にあった「Mark」「Gary」は後ろにずれています。

サンプルコード②:数値の配列を挿入する例

次に、int型のListに対して同様の操作を行う例を見てみましょう。

using System;
using System.Collections.Generic;

public class Demo {
    public static void Main(String[] args) {
        int[] intArr = { 10, 20, 30, 40, 50 };
        List<int> list = new List<int>(intArr);

        Console.WriteLine("Listの要素...");
        foreach (int i in list) {
            Console.WriteLine(i);
        }

        intArr = new int[] { 300, 400, 500 };
        Console.WriteLine("指定位置に新しい要素を挿入...");
        list.InsertRange(2, intArr);

        foreach (int res in list) {
            Console.WriteLine(res);
        }
    }
}

実行結果

Listの要素...
10
20
30
40
50
指定位置に新しい要素を挿入...
10
20
300
400
500
30
40
50

この例では、インデックス2の位置に「300」「400」「500」の3要素を挿入しています。「30」以降の要素が後ろへずれていることが確認できます。

まとめ

  • Listの任意の位置に複数の要素を一括挿入するにはInsertRangeメソッドを使う。
  • 第1引数に挿入開始位置のインデックス、第2引数に挿入したいコレクションを渡す。
  • 既存の要素は自動的に後ろへ移動され、データの上書きは発生しない。

配列や他のコレクションからListへの要素追加が必要な場面では、AddRange(末尾への追加)やInsertRange(任意位置への挿入)を使い分けることで、簡潔かつ効率的なコードを書くことができます。

  1. C#でList内の要素のインデックスを1行で取得する方法

    C#のListから特定の要素のインデックスを取得したい場合、FindIndex()メソッドとContains()メソッドを組み合わせることで、わずか1行のコードで実現できます。 a.Contains(Tennis));このコードでは、FindIndex()メソッドがラムダ式を受け取り、その条件に一致する最初の要素のインデックスを返します。条件判定の部分ではContains()メソッドを使って、「Tennis」という文字列を含む要素を検索しています。サンプルコード以下に完全な動作コードを示します。using System; using System.Collections.Generic; p

  2. Javaでコレクションの要素を取得する3つの方法(拡張for・Iterator・Enumeration)

    Javaでは、コレクションオブジェクトに格納された要素を取得する方法が主に3つあります。それぞれの特徴と使い方を、サンプルコードと実行結果とともに解説します。 1. 拡張forループ(for-eachループ)を使う方法 拡張forループ(for-eachループ)を使うと、コレクションの全要素を先頭から順番にシンプルに走査できます。インデックス管理や終了条件の記述が不要なため、最も可読性が高い方法です。 サンプルコード import java.util.ArrayList; public class RetrievingData { public static void main(St