【C#】ListDictionaryを指定したインデックスの配列インスタンスへコピーする方法
ListDictionaryは、System.Collections.Specialized名前空間に属するコレクションクラスで、キーと値のペアを単一リンクリスト形式で管理します。要素数が少ない場合(おおむね10項目程度まで)に高いパフォーマンスを発揮するのが特徴です。
ListDictionaryの内容を配列へコピーするには、CopyTo()メソッドを使用します。このメソッドは2つの引数を受け取ります。
- 第1引数:コピー先となる1次元のDictionaryEntry型配列
- 第2引数:コピーを開始するインデックス(0始まり)
指定したインデックス以降に各要素が順番に格納され、それより前の領域は初期状態(空)のまま残ります。
例1:インデックス0を起点として配列へコピーする
まずは、ListDictionaryの全要素を配列の先頭(インデックス0)からコピーする基本的な例です。
using System;
using System.Collections;
using System.Collections.Specialized;
public class Demo {
public static void Main() {
ListDictionary dict = new ListDictionary();
dict.Add(1, "Harry");
dict.Add(2, "Mark");
dict.Add(3, "John");
dict.Add(4, "Jacob");
dict.Add(5, "Tim");
dict.Add(6, "Sam");
dict.Add(7, "Tom");
dict.Add(8, "Kevin");
Console.WriteLine("ListDictionaryの要素...");
foreach (DictionaryEntry d in dict) {
Console.WriteLine(d.Key + " " + d.Value);
}
// 要素数と同じサイズの配列を用意
DictionaryEntry[] dictArr = new DictionaryEntry[dict.Count];
Console.WriteLine("\n配列インスタンスへのコピー...");
dict.CopyTo(dictArr, 0);
for (int i = 0; i < dictArr.Length; i++) {
Console.WriteLine("Key = " + dictArr[i].Key + ", Value = " + dictArr[i].Value);
}
}
}
実行結果
ListDictionaryの要素... 1 Harry 2 Mark 3 John 4 Jacob 5 Tim 6 Sam 7 Tom 8 Kevin 配列インスタンスへのコピー... Key = 1, Value = Harry Key = 2, Value = Mark Key = 3, Value = John Key = 4, Value = Jacob Key = 5, Value = Tim Key = 6, Value = Sam Key = 7, Value = Tom Key = 8, Value = Kevin
例2:中間のインデックス(5番目)からコピーを開始する
次に、サイズ10の配列に対して、インデックス5を起点としてコピーする例を見てみましょう。この場合、インデックス0~4には何も代入されず、空のDictionaryEntryがそのまま残ります。
using System;
using System.Collections;
using System.Collections.Specialized;
public class Demo {
public static void Main() {
ListDictionary dict = new ListDictionary();
dict.Add(1, "Harry");
dict.Add(2, "Mark");
dict.Add(3, "John");
dict.Add(4, "Jacob");
dict.Add(5, "Tim");
Console.WriteLine("ListDictionaryの要素...");
foreach (DictionaryEntry d in dict) {
Console.WriteLine(d.Key + " " + d.Value);
}
// サイズ10の配列を用意
DictionaryEntry[] dictArr = new DictionaryEntry[10];
Console.WriteLine("\n配列インスタンスへのコピー...");
dict.CopyTo(dictArr, 5);
for (int i = 0; i < dictArr.Length; i++) {
Console.WriteLine("Key = " + dictArr[i].Key + ", Value = " + dictArr[i].Value);
}
}
}
実行結果
ListDictionaryの要素... 1 Harry 2 Mark 3 John 4 Jacob 5 Tim 配列インスタンスへのコピー... Key = , Value = Key = , Value = Key = , Value = Key = , Value = Key = , Value = Key = 1, Value = Harry Key = 2, Value = Mark Key = 3, Value = John Key = 4, Value = Jacob Key = 5, Value = Tim
まとめ
ListDictionaryのCopyToメソッドを使えば、キーと値のペアをDictionaryEntry構造体として任意の位置から配列へコピーできます。コピー先の配列は「開始インデックス+要素数」以上の容量が必要です。容量が不足していたり、配列がnull・多次元だったりする場合は例外がスローされるため、呼び出し前に配列の状態を確認しておくことが重要です。
-
C#のSortedListで指定したインデックスの要素を削除する方法(RemoveAtメソッド)
C#のSortedListコレクションから、指定されたインデックス位置にある要素を削除するには、RemoveAt()メソッドを使用します。この記事では、RemoveAtメソッドの基本的な使い方を、実際のコード例と実行結果とともにわかりやすく解説します。RemoveAt()メソッドとはRemoveAt(int index)は、SortedList内の指定されたインデックス(0から始まる番号)にあるキーと値のペアを削除するメソッドです。削除後は、後続の要素が自動的に前に詰められ、Countプロパティの値も1つ減少します。サンプルコード1:単一の要素を削除するまずは、SortedListに複数の要素
-
C#のListDictionaryで指定したキーに関連付けられた値を取得・設定する方法
C#のListDictionaryでは、インデクサー(Itemプロパティ)を使うことで、指定したキーに関連付けられた値を簡単に取得したり、新しい値に更新したりできます。ListDictionaryはSystem.Collections.Specialized名前空間に属するコレクションで、要素数が少ない場合(目安として10項目程度まで)に高いパフォーマンスを発揮する特徴があります。以下のコード例では、キー「C」に関連付けられた値の取得と更新の両方を確認できます。例1:キーに関連付けられた値を取得するusing System; using System.Collections; using Sy