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

C#で初期サイズを指定して大文字と小文字を区別するHybridDictionaryを作成する方法

C#で初期サイズを指定し、大文字と小文字を区別するHybridDictionaryを作成するには、コンストラクタの第2引数にfalseを指定します。HybridDictionaryは、要素数が少ないうちはListDictionaryとして動作し、要素が増えると自動的にHashtableへ切り替わるコレクションクラスです。

例:大文字と小文字を区別するHybridDictionaryの作成

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

public class Demo {
   public static void Main(){
      // 初期サイズ5、大文字と小文字を区別する(false)
      HybridDictionary myDict = new HybridDictionary(5, false);
      myDict.Add("A", "AB");
      myDict.Add("B", "BC");
      myDict.Add("C", "DE");
      myDict.Add("D", "FG");
      myDict.Add("e", "fg");

      Console.WriteLine("キーと値のペア...");
      foreach(DictionaryEntry de in myDict)
      Console.WriteLine("Key = "+de.Key + ", Value = " + de.Value);
  }
}

出力

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

キーと値のペア...
Key = A, Value = AB
Key = B, Value = BC
Key = C, Value = DE
Key = D, Value = FG
Key = e, Value = fg

大文字の「D」と小文字の「e」のように、大文字・小文字だけが異なるキーでも、それぞれ独立したエントリとして登録されていることがわかります。これは第2引数にfalseを指定することで、キー比較の際に大文字と小文字が区別されるためです。

例:大文字と小文字を区別しない場合の挙動

比較のため、第2引数にtrueを指定して「大文字と小文字を区別しない」HybridDictionaryを作成した場合の例も見てみましょう。

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

public class Demo {
   public static void Main(){
      // 初期サイズ5、大文字と小文字を区別しない(true)
      HybridDictionary myDict = new HybridDictionary(5, true);
      myDict.Add("A", "AB");
      myDict.Add("B", "BC");
      myDict.Add("C", "DE");
      myDict.Add("e", "fg");
      myDict.Add("E", "FG"); // ここで例外が発生

      Console.WriteLine("キーと値のペア...");
      foreach(DictionaryEntry de in myDict)
      Console.WriteLine("Key = "+de.Key + ", Value = " + de.Value);
  }
}

出力

このコードでは、「e」と「E」が同じキーとみなされるため、実行時に例外がスローされます。

Run-time exception : An entry with the same key already exists.
Stack Trace:
[System.ArgumentException: An entry with the same key already exists.]
   at System.Collections.Specialized.ListDictionary.Add(Object key, Object value)
   at System.Collections.Specialized.HybridDictionary.Add(Object key, Object value)
   at Demo.Main() :line 15

まとめ

  • new HybridDictionary(初期サイズ, caseInsensitive) の形式でインスタンスを生成します。
  • 第2引数にfalseを指定すると、キーの大文字と小文字が区別され、ケース違いのキーを個別に登録できます。
  • 第2引数にtrueを指定すると、大文字と小文字が同一視され、ケース違いの同じキーを追加するとArgumentExceptionが発生します。
  • 適切な初期サイズを指定しておくと、ListDictionaryからHashtableへ切り替わる際の内部的な再構築処理を抑えられます。
  1. HTML5のカスタムデータ属性(data-*)の作成方法と使い方

    HTML5カスタムデータ属性とはHTML5で新たに導入された注目すべき機能の一つが、「カスタムデータ属性(data-* 属性)」です。これにより、開発者はHTML要素に対して独自の情報を自由に持たせることができるようになりました。カスタムデータ属性は必ず接頭辞「data-」で始まり、その後の名前は用途に合わせて自由に決めることができます。基本的な書き方<div class = "example" data-sports = "cricket" data-level = "complex">   

  2. JavaScriptでnewキーワードを使って配列を作成する方法

    JavaScriptでは、newキーワードとArray()コンストラクタを使用することで、簡単に配列を作成できます。本記事では、実際に動作するサンプルコードとともに、その基本的な使い方を解説します。 サンプルコード 以下は、newキーワードを使用してJavaScriptの配列を作成するコード例です。 <!DOCTYPE html> <html lang=ja> <head> <meta charset=UTF-8 /> <meta name=viewport content=width=device-width, initial-sca