C# ハッシュテーブルと例
⚡ スマートサマリー
C# のハッシュテーブルは、System.Collections 名前空間のコレクションであり、データをキーと値のペアとして格納します。各一意のキーは値に対応付けられ、キーによって格納された値を高速に検索できます。

C# のハッシュテーブルとは何ですか?
ハッシュ テーブルは、キーと値の項目を格納するために使用される特別なコレクションです。 したがって、スタック、配列リスト、キューのように 2 つの値だけを保存するのではなく、ハッシュ テーブルには 2 つの値が保存されます。 これら XNUMX つの値は、ハッシュ テーブルの要素を形成します。
以下は、ハッシュ テーブルの値がどのように見えるかを示す例です。
{ "001" , ".Net" }
{ "002" , ".C#" }
{ "003" , "ASP.Net" }
上記には 3 つのキーと値のペアがあります。 各要素のキーはそれぞれ 001、002、003 です。 各キーと値のペアの値は次のとおりです。純それぞれ「」、「C#」、「ASP.Net」です。
Hashtable コレクションで使用できる操作を詳しく見てみましょう。
ハッシュテーブルの宣言
ハッシュテーブルの宣言を以下に示します。 ハッシュテーブルは、ハッシュテーブル データ型を使用して作成されます。 「new」キーワードは、ハッシュテーブルのオブジェクトを作成するために使用されます。 次に、オブジェクトは変数 ht に割り当てられます。
Hashtable ht = new Hashtable()
ハッシュテーブルへの要素の追加
Add メソッドは、要素を キュー。 ステートメントの一般的な構文を以下に示します。
HashTable.add("key","value")
例1:
ハッシュ テーブルの各要素は 2 つの値で構成され、XNUMX つはキー、もう XNUMX つは値であることに注意してください。
では、これがコードレベルで動作する様子を見てみましょう。 以下のコードはすべて、コンソール アプリケーションに書き込まれます。
コードは Program.cs ファイルに書き込まれます。 以下のプログラムでは、上記のメソッドをどのように使用できるかを確認するコードを記述します。
今のところ、この例では、 hashtable を作成し、要素を hashtable に追加し、それに応じて表示する方法だけを見ていきます。
using System; using System.Collections; using System.Collections.Generic; using System.Linq; using System.Text; using System.Threading.Tasks; namespace DemoApplication { class Program { static void Main(string[] args) { Hashtable ht = new Hashtable(); ht.Add("001",".Net"); ht.Add("002","C#"); ht.Add("003","ASP.Net"); ICollection keys = ht.Keys; foreach (String k in keys) { Console.WriteLine(ht[k]); } Console.ReadKey(); } } }
Code 説明:-
- まず、キーワード「New」を使用して Hashtable データ型を使用してハッシュテーブル変数を宣言します。 定義する変数の名前は「ht」です。
- 次に、Add メソッドを使用して要素をハッシュ テーブルに追加します。 ハッシュテーブルに何かを追加するときは、キー要素と値要素の両方を追加する必要があることに注意してください。
- ハッシュ テーブルの要素を直接表示する方法はありません。
- ハッシュ テーブルを表示するには、まずハッシュ テーブルからキーのリスト (001、002、003) を取得する必要があります。
- これは、ICollection インターフェイスを介して行われます。 これは、ハッシュテーブル コレクションのキーを格納するために使用できる特別なデータ型です。 次に、ハッシュテーブル コレクションのキーを変数 'keys' に割り当てます。
- 次に、ステートメント ht[k] を使用して、キー値ごとにハッシュテーブル内の関連する値を取得します。
上記のコードが正しく入力され、プログラムが実行されると、次の出力が表示されます。
出力:
ハッシュ テーブルで使用できるメソッドをさらにいくつか見てみましょう。
キーを含む
このメソッドは、ハッシュテーブルにキーが存在するかどうかを確認するために使用されます。 以下は、このステートメントの一般的な構文です。 このステートメントは、キーが存在する場合は true を返し、それ以外の場合は値 false を返します。
Hashtable.Containskey(key)
値を含む
このメソッドは、ハッシュテーブルに値が存在するかどうかを確認するために使用されます。 以下は、このステートメントの一般的な構文です。 このステートメントは、値が存在する場合は true を返し、存在しない場合は値 false を返します。
Hashtable.ContainsValue(value)
例2:
コードを変更しましょう コンソールアプリケーション 「Containskey」メソッドと「ContainsValue」メソッドの使用方法を紹介します。
using System; using System.Collections; using System.Collections.Generic; using System.Linq; using System.Text; using System.Threading.Tasks; namespace DemoApplication { class Program { static void Main(string[] args) { Hashtable ht = new Hashtable(); ht.Add("001",".Net"); ht.Add("002","C#"); ht.Add("003","ASP.Net"); Console.WriteLine(ht.ContainsKey("001")); Console.WriteLine(ht.ContainsValue("C#")); Console.ReadKey(); } } }
Code 説明:-
- まず、ContainsKey メソッドを使用して、キーがハッシュテーブルに存在するかどうかを確認します。 キーがハッシュテーブルに存在する場合、このメソッドは true を返します。 キーはハッシュテーブルに存在するため、このメソッドは true を返す必要があります。
- 次に、ContainsValue メソッドを使用して、値がハッシュテーブルに存在するかどうかを確認します。 値がハッシュテーブルに存在するため、このメソッドは「true」を返します。
上記のコードが正しく入力され、プログラムが実行されると、次の出力が表示されます。
出力:
出力から、検索対象のキーと値の両方がハッシュ テーブルに存在することが明確にわかります。
C#ハッシュテーブルをループ処理する方法
上記の例ではKeysコレクションを通して値を読み取りましたが、ハッシュテーブルはもっと簡潔な方法で処理できます。DictionaryEntryに対するforeachループを使用すると、すべての要素のキーと値を一度に取得できるため、ハッシュテーブルを読み取る最も一般的な方法となります。
ステップ1) ハッシュテーブルを作成し、そこに3つのキーと値のペアを追加します。
ステップ2) DictionaryEntry変数を使用してハッシュテーブルをループ処理し、各エントリのKeyプロパティとValueプロパティを読み取ります。
using System; using System.Collections; namespace DemoApplication { class Program { static void Main(string[] args) { Hashtable ht = new Hashtable(); ht.Add("101", "Java"); ht.Add("102", "Python"); ht.Add("103", "Kotlin"); foreach (DictionaryEntry entry in ht) { Console.WriteLine(entry.Key + " - " + entry.Value); } Console.ReadKey(); } } }
Code 説明:-
- htという名前のハッシュテーブルが作成され、Addメソッドを使用して3つのキーと値のペアが挿入されます。
- foreachループは各要素をDictionaryEntryに割り当て、そのKeyプロパティとValueプロパティはペアの2つの部分を公開します。
プログラムを実行すると、101 – のように、各キーとその値の横にそれぞれが出力されます。 Javaハッシュテーブルは挿入順序を保持しないため、ペアは追加された順序とは異なる順序で出現する可能性があります。キーのみを読み取るにはKeysコレクションをループし、値のみを読み取るにはValuesコレクションをループしてください。
C# ハッシュテーブルのメソッドとプロパティ
Hashtableクラスは、ペアの追加や削除から、メンバーシップの確認、要素数のカウントまで、必要なほぼすべてのタスクを網羅する少数のメソッドとプロパティを提供します。最も便利なメンバーを以下に示します。
| Member | タイプ | 詳細説明 |
|---|---|---|
| キーと値を追加する | 方法 | 新しいキーと値のペアを挿入します。キーは一意である必要があります。 |
| 削除(キー) | 方法 | 指定されたキーに一致する要素を削除します。 |
| クリア() | 方法 | ハッシュテーブルからすべてのキーと値のペアを削除します。 |
| ContainsKey(key) | 方法 | 指定されたキーが存在する場合にtrueを返します。 |
| ContainsValue(value) | 方法 | 指定された値が存在する場合にtrueを返します。 |
| 数量カウント | プロパティ | 保存されているキーと値のペアの数を取得します。 |
| キーズ | プロパティ | すべてのキーのコレクションを返します。 |
| 価値観 | プロパティ | すべての値のコレクションを返します。 |
各キーがハッシュ化されているため、ContainsKeyとインデクサーはほぼ一定時間で要素を特定できます。これがハッシュテーブルが高速検索に非常に役立つ理由です。
C#におけるハッシュテーブルと辞書の違い
ハッシュテーブルと辞書はどちらもキーと値のペアを格納し、どちらもC#のより広いファミリーに属します。 コレクション重要な違いは型安全性であり、その違いによって、新しいコードでどちらを採用すべきかが決まります。
- 型式安全性: ハッシュテーブルはすべてのキーと値をオブジェクトとして格納しますが、辞書はは汎用的なので、コンパイラは使用する型をチェックします。
- 名前空間: Hashtable は System.Collections に属し、Dictionary は System.Collections.Generic に属します。
- Boxing: ハッシュテーブルはintなどの値型を囲い込みますが、汎用的な辞書はそれらを直接格納するため、そのコストを回避できます。
- パフォーマンス: 辞書は、値を読み取る際にオブジェクトから元のオブジェクトへ型変換する必要がないため、通常は高速です。
- ねじの安全性: Hashtableは Sync1 つのライターと多数のリーダーのための標準化されたラッパーであり、並行コードは通常 ConcurrentDictionary を選択します。
新規プロジェクトにおいては、汎用的な辞書型が推奨される選択肢であり、非汎用的なハッシュテーブル型は主に古いコードで見られる。




