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

C#でOrderedDictionaryの指定した位置にキーと値を指定して新しいエントリを挿入する方法

C#のOrderedDictionaryコレクションでは、Insert()メソッドを使うことで、指定したインデックス位置に新しいエントリ(キーと値のペア)を挿入できます。既存の要素の順序を保ちながら、任意の場所に要素を追加したい場合に便利です。

Insert()メソッドの基本構文

Insert()メソッドは、次の3つの引数を受け取ります。

  • index:挿入位置を示す0から始まるインデックス
  • key:挿入するエントリのキー
  • value:挿入するエントリの値

例1:数値キーを使った挿入

以下のコードでは、まず8つの要素を追加し、その後インデックス7の位置に新しいエントリ「15 = Fifteen」を挿入しています。

using System;
using System.Collections;
using System.Collections.Specialized;
public class Demo {
   public static void Main(){
      OrderedDictionary dict = new OrderedDictionary();
      dict.Add("1", "One");
      dict.Add("2", "Two");
      dict.Add("3", "Three");
      dict.Add("4", "Four");
      dict.Add("5", "Five");
      dict.Add("6", "Six");
      dict.Add("7", "Seven");
      dict.Add("8", "Eight");
      Console.WriteLine("Elements...");
      IDictionaryEnumerator demoEnum = dict.GetEnumerator();
      while (demoEnum.MoveNext()) {
         Console.WriteLine("Key = " + demoEnum.Key + ", Value = " + demoEnum.Value);
      }
      dict.Insert(7, "15", "Fifteen");
      Console.WriteLine("Elements...UPDATED");
      demoEnum = dict.GetEnumerator();
      while (demoEnum.MoveNext()) {
         Console.WriteLine("Key = " + demoEnum.Key + ", Value = " + demoEnum.Value);
      }
   }
}

出力結果

このプログラムを実行すると、次のような出力が得られます。

Elements...
Key = 1, Value = One
Key = 2, Value = Two
Key = 3, Value = Three
Key = 4, Value = Four
Key = 5, Value = Five
Key = 6, Value = Six
Key = 7, Value = Seven
Key = 8, Value = Eight
Elements...UPDATED
Key = 1, Value = One
Key = 2, Value = Two
Key = 3, Value = Three
Key = 4, Value = Four
Key = 5, Value = Five
Key = 6, Value = Six
Key = 7, Value = Seven
Key = 15, Value = Fifteen
Key = 8, Value = Eight

出力を見ると、「15 = Fifteen」がインデックス7の位置、つまり元々「8 = Eight」があった場所より前に挿入され、「8 = Eight」が一つ後ろにずれていることがわかります。

例2:Add()とInsert()を組み合わせた使用例

次の例では、まずAdd()メソッドで末尾に要素を追加し、その後Insert()メソッドで途中の位置に要素を挿入しています。

using System;
using System.Collections;
using System.Collections.Specialized;
public class Demo {
   public static void Main(){
      OrderedDictionary dict = new OrderedDictionary();
      dict.Add("A", "Laptop");
      dict.Add("B", "Desktop");
      Console.WriteLine("Elements...");
      IDictionaryEnumerator demoEnum = dict.GetEnumerator();
      while (demoEnum.MoveNext()) {
         Console.WriteLine("Key = " + demoEnum.Key + ", Value = " + demoEnum.Value);
      }
      dict.Add("C", "Ultrabook");
      dict.Add("D", "Alienware");
      Console.WriteLine("
Elements...UPDATED");
      demoEnum = dict.GetEnumerator();
      while (demoEnum.MoveNext()) {
         Console.WriteLine("Key = " + demoEnum.Key + ", Value = " + demoEnum.Value);
      }
      dict.Insert(2, "K", "Speakers");
      Console.WriteLine("
Elements...UPDATED");
      demoEnum = dict.GetEnumerator();
      while (demoEnum.MoveNext()) {
         Console.WriteLine("Key = " + demoEnum.Key + ", Value = " + demoEnum.Value);
      }
   }
}

出力結果

実行すると、次の出力が得られます。

Elements...
Key = A, Value = Laptop
Key = B, Value = Desktop 

Elements...UPDATED
Key = A, Value = Laptop
Key = B, Value = Desktop
Key = C, Value = Ultrabook
Key = D, Value = Alienware 

Elements...UPDATED
Key = A, Value = Laptop
Key = B, Value = Desktop
Key = K, Value = Speakers
Key = C, Value = Ultrabook
Key = D, Value = Alienware

この例では、dict.Insert(2, "K", "Speakers")によって、インデックス2の位置(3番目)に「K = Speakers」が挿入されています。その結果、それまでインデックス2以降にあった「C = Ultrabook」と「D = Alienware」がそれぞれ一つ後ろに移動しています。

まとめ

OrderedDictionaryInsert(int index, object key, object value)メソッドを使えば、要素の順序を維持しながら任意の位置に新しいキーと値のペアを挿入できます。Add()メソッドが常に末尾に追加するのに対し、Insert()は挿入位置を自由に指定できる点が大きな違いです。なお、指定したインデックスが範囲外の場合や、同じキーがすでに存在する場合には例外が発生するため、実際のコードでは適切なエラー処理を行うことをおすすめします。

  1. C#でのHashtableとDictionaryの使い方徹底解説:基本操作からサンプルコードまで

    C#では、キーと値のペアを扱うコレクションとして「Hashtable」と「Dictionary」がよく使われます。どちらもキーを基準に要素へ高速にアクセスできる便利なクラスですが、それぞれ特徴や使い方が異なります。この記事では、両者の主なメソッドと実際のコード例を通じて、基本的な操作方法をわかりやすく解説します。 Hashtable(ハッシュテーブル)とは Hashtable クラスは、キーのハッシュコードに基づいて整理された、キーと値のペアのコレクションを表します。格納された要素には、キーを使ってアクセスします。非ジェネリック型のため、キー・値ともに object 型として扱われる点が

  2. Redis GETSETコマンドの使い方 – キーに新しい文字列値を設定し、古い値を取得する方法

    このチュートリアルでは、RedisのGETSETコマンドを使って、指定したキーに新しい文字列値を設定すると同時に、古い文字列値を取得する方法を解説します。 GETSETコマンドとは GETSETコマンドは、指定したキーに新しい文字列値を設定し、そのキーに以前保存されていた古い文字列値を返すコマンドです。このコマンドは「値の読み取りと書き込みをアトミック(不可分)に実行したい場合」などに便利で、カウンターのリセットや状態の入れ替え処理などによく使われます。 動作のポイントは以下の通りです。 キーが存在しない場合は (nil) を返します キーは存在するが、保存されている値が文字列型ではない場合