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

C#のOrderedDictionaryで指定インデックスにキーと値を挿入する方法

C#のOrderedDictionaryクラスには、指定したインデックス位置にキーと値のペアを挿入するためのInsertメソッドが用意されています。この記事では、具体的なコード例と実行結果を通じて、Insertメソッドの使い方をわかりやすく解説します。

Insertメソッドの基本構文

public void Insert(int index, object key, object value)
  • index … 要素を挿入する位置(0から始まるインデックス番号)
  • key … 挿入する要素のキー
  • value … 挿入する要素の値

挿入位置より後ろにある既存の要素は自動的に後方へシフトされるため、OrderedDictionary内の要素の順序は維持されます。

サンプル1:指定インデックスへの要素挿入

using System;
using System.Collections;
using System.Collections.Specialized;

public class Demo {
   public static void Main(){
      OrderedDictionary dict = new OrderedDictionary();
      dict.Add("A", "Books");
      dict.Add("B", "Electronics");
      dict.Add("C", "Smart Wearables");
      dict.Add("D", "Pet Supplies");

      Console.WriteLine("OrderedDictionaryの要素...");
      foreach(DictionaryEntry d in dict){
         Console.WriteLine(d.Key + " " + d.Value);
      }
      Console.WriteLine("OrderedDictionaryの要素数 = " + dict.Count);

      // インデックス4と5に新しい要素を挿入
      dict.Insert(4, "E", "Clothing");
      dict.Insert(5, "F", "Footwear");

      Console.WriteLine("OrderedDictionaryの要素...更新後");
      foreach(DictionaryEntry d in dict){
         Console.WriteLine(d.Key + " " + d.Value);
      }
      Console.WriteLine("OrderedDictionaryの要素数(更新後)= " + dict.Count);

      // キー"E"を持つ要素を削除
      dict.Remove("E");
      Console.WriteLine("OrderedDictionaryの要素数(削除後)= " + dict.Count);
   }
}

実行結果

OrderedDictionaryの要素...
A Books
B Electronics
C Smart Wearables
D Pet Supplies
OrderedDictionaryの要素数 = 4
OrderedDictionaryの要素...更新後
A Books
B Electronics
C Smart Wearables
D Pet Supplies
E Clothing
F Footwear
OrderedDictionaryの要素数(更新後)= 6
OrderedDictionaryの要素数(削除後)= 5

解説

まず4つの要素(A〜D)を追加した状態から、Insert(4, "E", "Clothing")Insert(5, "F", "Footwear")によって新しい要素を追加しています。その後、Remove("E")でキー「E」の要素を削除すると、要素数は6から5に減少します。このようにInsertメソッドを使えば、任意の位置へ柔軟に要素を追加できます。

サンプル2:挿入による順序の変化とEqualsメソッドによる比較

次に、2つのOrderedDictionaryを作成し、片方に要素を挿入した場合の順序の変化と、Equalsメソッドによる等価比較の結果を確認してみましょう。

using System;
using System.Collections;
using System.Collections.Specialized;

public class Demo {
   public static void Main(){
      OrderedDictionary dict1 = new OrderedDictionary();
      dict1.Add("A", "Books");
      dict1.Add("B", "Electronics");
      dict1.Add("C", "Smart Wearables");
      dict1.Add("D", "Pet Supplies");
      dict1.Add("E", "Clothing");
      dict1.Add("F", "Footwear");

      Console.WriteLine("OrderedDictionary1の要素...");
      foreach(DictionaryEntry d in dict1){
         Console.WriteLine(d.Key + " " + d.Value);
      }

      OrderedDictionary dict2 = new OrderedDictionary();
      dict2.Add("1", "One");
      dict2.Add("2", "Two");
      dict2.Add("3", "Three");
      dict2.Add("4", "Four");
      dict2.Add("5", "Five");
      dict2.Add("6", "Six");

      Console.WriteLine("\nOrderedDictionary2の要素...");
      foreach(DictionaryEntry d in dict2){
         Console.WriteLine(d.Key + " " + d.Value);
      }

      Console.WriteLine("\nOrderedDictionary1とOrderedDictionary2は等しいか? = " + (dict1.Equals(dict2)));

      // インデックス3に新しい要素を挿入
      dict2.Insert(3, "10", "Ten");

      Console.WriteLine("\nOrderedDictionary2の要素...更新後");
      foreach(DictionaryEntry d in dict2){
         Console.WriteLine(d.Key + " " + d.Value);
      }

      Console.WriteLine("\nOrderedDictionary1とOrderedDictionary2は等しいか? = " + (dict1.Equals(dict2)));
   }
}

実行結果

OrderedDictionary1の要素...
A Books
B Electronics
C Smart Wearables
D Pet Supplies
E Clothing
F Footwear
OrderedDictionary2の要素...
1 One
2 Two
3 Three
4 Four
5 Five
6 Six
OrderedDictionary1とOrderedDictionary2は等しいか? = False
OrderedDictionary2の要素...更新後
1 One
2 Two
3 Three
10 Ten
4 Four
5 Five
6 Six
OrderedDictionary1とOrderedDictionary2は等しいか? = False

解説

この例では、dict2.Insert(3, "10", "Ten")により、インデックス3の位置(「4 Four」の前)に新しい要素「10 Ten」が挿入され、それ以降の要素が一つずつ後ろにずれていることが確認できます。また、内容が異なる2つのOrderedDictionaryをEqualsメソッドで比較すると、挿入前後のどちらの場合もFalseが返されます。

まとめ

  • OrderedDictionary.Insert(index, key, value)を使うと、任意の位置にキーと値のペアを挿入できる。
  • 挿入後も要素の順序は保持され、既存要素は自動的に後ろへシフトされる。
  • 要素の削除にはRemove(key)メソッドを使用する。
  • Equalsメソッドで2つのOrderedDictionaryの内容を比較できる。
  1. C#でのHashtableとDictionaryの使い方徹底解説:基本操作からサンプルコードまで

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

  2. Python Pandas – NaNをマスクして特定の値に置き換える方法

    Python Pandas – NaNをマスクして特定の値に置き換えるPandasのIndexオブジェクトに含まれるNaN(欠損値)をマスクし、特定の値に一括で置き換えるには、index.putmask()メソッドを使用します。このメソッドの第1引数には、NaNを検出するためのindex.isna()メソッドを指定します。putmask()メソッドは、条件がTrueとなる位置の値を指定した値で置き換える機能を持っています。一方、isna()は各要素がNaNかどうかを判定し、NaNであればTrueを返します。この2つを組み合わせることで、「NaNだけを別の値に置き換える」という処理をシンプルに実