English | 简体中文 | 繁體中文 | Русский язык | Français | Español | Português | Deutsch | 日本語 | 한국어 | Italiano | بالعربية
Hashtableは、非ジェネリックのキー値対を保存する集合で、ジェネリック Dictionary<TKey, TValue>コレクションに似ています。各キーのハッシュコードを計算して検索を最適化し、内部で異なるバケットに保存し、値にアクセスする際に指定されたキーのハッシュコードと一致させる方法で動作します。
Hashtableはキー値対を保存します。
System.Collection命名空间に属しています。
IDictionaryインターフェースを実装します。
キーはユニークで、null であってはなりません。
値は null または重複できます。
インデクサーに関連するキーを渡して値にアクセスできます、例えば myHashtable[key]
要素は DictionaryEntry オブジェクトとして保存されます。
以下の例では、ハッシュテーブルの作成と要素の追加方法を示します。
Hashtable numberNames = new Hashtable(); numberNames.Add(1, "One"); //Add()メソッドを使用してキーを追加します/値 numberNames.Add(2, "Two"); numberNames.Add(3, "Three"); //以下がランタイムエラーを引き起こします:既にキーが追加されています。-time exception: key already added. //numberNames.Add(3, "Three"); foreach (DictionaryEntry de in numberNames) Console.WriteLine("キー: {0}, 値: {1} //コレクションを使用-initializer文法でHashtableを作成 var cities = new Hashtable(){ {"イギリス", "ロンドン, マンチェスター, ブライトン"}, {"アメリカ", "シカゴ, ニューヨーク, ワシントン"}, {"インド", "ムンバイ, ニューデリー, ポン"} }; foreach (DictionaryEntry de in cities) Console.WriteLine("キー: {0}, 値: {1}
Hashtableコレクションは、以下のように辞書のすべての要素を含むことができます。
Dictionary<int, string> dict = new Dictionary<int, string>(); dict.Add(1, "one"); dict.Add(2, "two"); dict.Add(3, "three"); Hashtable ht = new Hashtable(dict);
インデクサーにキーを渡すことで、Hashtableから既存のキーの値を取得できます。Hashtableは非ジェネリックのコレクションであり、値を取得する際には強制変換が必要です。
//コレクションを使用-initializer文法でHashtableを作成 var cities = new Hashtable(){ {"イギリス", "ロンドン, マンチェスター, ブライトン"}, {"アメリカ", "シカゴ, ニューヨーク, ワシントン"}, {"インド", "ムンバイ, ニューデリー, ポン"} }; string citiesOfUK = (string) cities["UK"]; //文字列に変換 string citiesOfUSA = (string) cities["USA"]; //文字列に変換 Console.WriteLine(citiesOfUK); Console.WriteLine(citiesOfUSA); cities["UK"] = "リバプール, ブリストル"; // UKの値を更新 cities["USA"] = "ロサンゼルス, ボストン"; //USAの値を更新 if(!cities.ContainsKey("フランス")){ cities["フランス"] = "パリ"; }
Remove()メソッドは、Hashtable内で指定された値に一致するキー値を削除します。指定されたキーがHashtable内に存在しない場合、KeyNotfoundExceptionが発生します。したがって、削除する前にContainsKey()メソッドを使用してキーが存在するか確認します。
Clear()メソッドを使用すると、一度にすべての要素を削除できます。
var cities = new Hashtable(){ {"イギリス", "ロンドン, マンチェスター, ブライトン"}, {"アメリカ", "シカゴ, ニューヨーク, ワシントン"}, {"インド", "ムンバイ, ニューデリー, ポン"} }; cities.Remove("UK"); // UKを削除する //UKを削除する //ランタイムエラー:KeyNotFoundExceptionが発生しました if(cities.ContainsKey("France")){ // キーを取得する前に確認してください UKを削除する } cities.Clear(); //すべての要素を削除する
以下の図はHashtableクラスの階層構造を示しています。