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

【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・多次元だったりする場合は例外がスローされるため、呼び出し前に配列の状態を確認しておくことが重要です。

  1. C#のSortedListで指定したインデックスの要素を削除する方法(RemoveAtメソッド)

    C#のSortedListコレクションから、指定されたインデックス位置にある要素を削除するには、RemoveAt()メソッドを使用します。この記事では、RemoveAtメソッドの基本的な使い方を、実際のコード例と実行結果とともにわかりやすく解説します。RemoveAt()メソッドとはRemoveAt(int index)は、SortedList内の指定されたインデックス(0から始まる番号)にあるキーと値のペアを削除するメソッドです。削除後は、後続の要素が自動的に前に詰められ、Countプロパティの値も1つ減少します。サンプルコード1:単一の要素を削除するまずは、SortedListに複数の要素

  2. C#のListDictionaryで指定したキーに関連付けられた値を取得・設定する方法

    C#のListDictionaryでは、インデクサー(Itemプロパティ)を使うことで、指定したキーに関連付けられた値を簡単に取得したり、新しい値に更新したりできます。ListDictionaryはSystem.Collections.Specialized名前空間に属するコレクションで、要素数が少ない場合(目安として10項目程度まで)に高いパフォーマンスを発揮する特徴があります。以下のコード例では、キー「C」に関連付けられた値の取得と更新の両方を確認できます。例1:キーに関連付けられた値を取得するusing System; using System.Collections; using Sy