2012-03-29 13 views
10

ハッシュテーブルを辞書に変換する方法について多くの質問と回答がありますが、どのように辞書をハッシュテーブルに変換できますか?Dictionary <>をC#のHashtableに変換するには?

+1

それはなぜ必要なのでしょうか?ハッシュテーブルは、キーで計算された値が値の場所を生成するという点で非常に特化しています...辞書は、まっすぐな(キー、値)コレクションです。なぜ辞書をハッシュテーブルに変換したいのですか? –

+0

最も単純なレベルでは、私は怠惰です。 'Hashtable'型のオブジェクトは、多くの場所で使われています。 – jpints14

+0

それ自体がそれを使用する理由ではありません。ディクショナリとハッシュテーブルは、異なる状況下で使用される異なる獣です。ご存じのように、リストは多くの場所で使用されています...だから、それを使わないのはなぜですか? :-s –

答えて

23

最も簡単な方法は、Hashtableのコンストラクタを使用することです。

 var dictionary = new Dictionary<object, object>(); 
     //... fill the dictionary 
     var hashtable = new Hashtable(dictionary); 
4

やりたいために、かなり珍しいようだが、最も簡単で、これを試してみてください

var hash = new Hashtable(); 
foreach(var pair in dictionary) { 
    hash.Add(pair.Key,pair.Value); 
} 

+1

これを 'ToHashTable'拡張メソッドに含めて、今すぐ! – Dismissile

+1

同じことをする[コンストラクタ](http://msdn.microsoft.com/en-us/library/kdkta2sx.aspx)もあります。 – Joey

+0

これは私がやっていたことです。あまりにも明白なやり方があるのか​​疑問に思っていました。しかし、ありがとう! – jpints14

8
Dictionary<int, string> dictionary = new Dictionary<int, string> 
    { 
     {1,"One"}, 
     {2,"Two"} 
    }; 
Hashtable hashtable = new Hashtable(dictionary); 

(ない珍しいなど「道具が平等のチェックではなく、型指定されていない平等のチェックを入力しない」と仮定した場合)

3

あなたはIEqualityComparerパラメータを取るHashtableコンストラクタのオーバーロードを使用して検討する必要があります。このように

var hashtable = new Hashtable(dictionary, (IEqualityComparer) dictionary.Comparer); 

は、あなたのHashtableは、辞書と同じComparerを使用しています。たとえば、辞書で大文字と小文字を区別しない文字列キーを使用した場合、Hashtableも大文字小文字を区別しないようにすることができます。例:

var d = new Dictionary<string, string>(StringComparer.OrdinalIgnoreCase); 
d.Add("a", "a"); 
d.Add("b", "b"); 

bool found; 
found = d.ContainsKey("A"); // true 

var hashtable1 = new Hashtable(d); 
var hashtable2 = new Hashtable(d, (IEqualityComparer) d.Comparer); 

found = hashtable1["A"] != null; // false - by default it's case-sensitive 

found = hashtable2["A"] != null; // true - uses same comparer as the original dictionary 
関連する問題