C#でArrayList全体を指定したインデックスから始まる1次元配列にコピーする方法
C#のArrayListクラスには、要素を配列へコピーするためのCopyTo()メソッドが用意されています。このメソッドを使うと、ArrayListの全要素を、指定したインデックスから始まる1次元配列にコピーできます。
CopyToメソッドはオーバーロードされており、ここでは「コピー先の配列」と「コピー開始位置のインデックス」を引数として受け取る形式を使用します。コピー元のArrayListの要素数が、インデックス以降の配列の残り容量を超える場合は例外がスローされる点に注意してください。
サンプルコード1:文字列配列へのコピー
以下の例では、文字列を格納したArrayList全体を、文字列型の1次元配列の先頭(インデックス0)からコピーしています。
using System;
using System.Collections;
public class Demo {
public static void Main() {
ArrayList list = new ArrayList();
list.Add("PQ");
list.Add("RS");
list.Add("TU");
list.Add("UV");
list.Add("WX");
list.Add("YZ");
Console.WriteLine("ArrayListの要素...");
for (int i = 0; i < list.Count; i++) {
Console.WriteLine(list[i]);
}
String[] strArr = new String[6] {"One", "Two", "Three", "Four", "Five", "Six"};
Console.WriteLine("\n配列の要素...");
for (int i = 0; i < strArr.Length; i++) {
Console.WriteLine(strArr[i]);
}
// インデックス0からArrayList全体を配列へコピー
list.CopyTo(strArr, 0);
Console.WriteLine("\n更新後の配列の要素...");
for (int i = 0; i < strArr.Length; i++) {
Console.WriteLine(strArr[i]);
}
}
}実行結果
ArrayListの要素... PQ RS TU UV WX YZ 配列の要素... One Two Three Four Five Six 更新後の配列の要素... PQ RS TU UV WX YZ
実行結果を見ると、配列の元の値(One〜Six)がすべてArrayListの内容(PQ〜YZ)で上書きされていることがわかります。
サンプルコード2:整数配列への部分的な上書き
次の例では、2つの要素を持つArrayListを、5つの要素を持つ整数配列の先頭からコピーします。ArrayListの要素数より配列の方が大きいため、コピーされなかった後半の要素は元の値のまま残ります。
using System;
using System.Collections;
public class Demo {
public static void Main() {
ArrayList list = new ArrayList();
list.Add(100);
list.Add(200);
Console.WriteLine("ArrayListの要素...");
for (int i = 0; i < list.Count; i++) {
Console.WriteLine(list[i]);
}
int[] intArr = new int[5] {10, 20, 30, 40, 50};
Console.WriteLine("\n配列の要素...");
for (int i = 0; i < intArr.Length; i++) {
Console.WriteLine(intArr[i]);
}
// インデックス0からArrayList全体を配列へコピー
list.CopyTo(intArr, 0);
Console.WriteLine("\n更新後の配列の要素...");
for (int i = 0; i < intArr.Length; i++) {
Console.WriteLine(intArr[i]);
}
}
}実行結果
ArrayListの要素... 100 200 配列の要素... 10 20 30 40 50 更新後の配列の要素... 100 200 30 40 50
ポイントまとめ
- CopyTo(array, index)は、ArrayListの全要素を配列の指定インデックス以降に順番にコピーします。
- 配列のサイズが十分でも、ArrayListの要素数が少なければ、残りの要素は元の値のまま維持されます。
- コピー先のインデックス以降の領域がArrayListの要素数より小さい場合、ArgumentExceptionが発生します。
- arrayListがnullの場合やindexが範囲外の場合も例外がスローされるため、事前にサイズを確認しておくと安全です。
-
C#でArrayListの指定したインデックスにある要素を削除する方法
ArrayListから指定したインデックス位置の要素を削除するには、RemoveAt()メソッドを使用します。このメソッドは、引数に渡されたインデックス番号に対応する要素を削除し、その後ろにある要素は自動的に前に詰められます。インデックスは0から始まるため注意してください。 例1 using System; using System.Collections; public class Demo { public static void Main(String[] args) { ArrayList list1 = new ArrayList(); li
-
C#のSortedListで指定したインデックスの要素を削除する方法(RemoveAtメソッド)
C#のSortedListコレクションから、指定されたインデックス位置にある要素を削除するには、RemoveAt()メソッドを使用します。この記事では、RemoveAtメソッドの基本的な使い方を、実際のコード例と実行結果とともにわかりやすく解説します。RemoveAt()メソッドとはRemoveAt(int index)は、SortedList内の指定されたインデックス(0から始まる番号)にあるキーと値のペアを削除するメソッドです。削除後は、後続の要素が自動的に前に詰められ、Countプロパティの値も1つ減少します。サンプルコード1:単一の要素を削除するまずは、SortedListに複数の要素