5

自分の値のキーを取得したいのですが、ハッシュテーブルで可能で
はありません。これを行うためのデータ ストレッチャーはありますか??

    Hashtable x = new Hashtable();
    x.Add("1", "10");
    x.Add("2", "20");
    x.Add("3", "30");

    x.GetKey(20);//equal 2
4

4 に答える 4

9

すべてのキーが文字列の場合。

var key = x.Keys.OfType<String>().FirstOrDefault(s => x[s] == "20")

または、代わりに Dictionary を使用することをお勧めします。

Dictionary<string, string> x = new Dictionary<string, string>();
x.Add("1", "10");
x.Add("2", "20");
x.Add("3", "30");

string result = x.Keys.FirstOrDefault(s => x[s] == "20");

値が常に 1 つの異なるキーを持つことがわかっている場合は、Single代わりに を使用しFirstOrDefaultます。

于 2012-08-29T12:12:29.690 に答える
2

Linq 演算子を使用できます

x.Keys.OfType<String>().FirstOrDefault(a => x[a] == "20")

foreach で繰り返すことができます

于 2012-08-29T12:13:12.437 に答える
2

O(1)ソリューションを探している場合Hashtableは、このテーブルの値がキーになり、キーが対応する値になる逆も実装する必要がある場合があります。

于 2012-08-29T12:13:41.203 に答える
1

2つ使用することを強くお勧めしますDictionary<string, string>が、これは、アイテム間の1対1の関係であることを意味します。

var dict1 = new Dictionary<string, string>();
var dict2 = new Dictionary<string, string>();

dict1.Add("1", "10");
dict2.Add("10", "1");

dict1.Add("2", "20");
dict2.Add("20", "2");

dict1.Add("3", "30");
dict2.Add("30", "3");

var valueOfDictOne = dict1["1"];
var valueOfDictTwo = dict2["10"];
于 2012-08-29T12:18:36.833 に答える