2016-08-02 2 views
0

私は、複数のキーでアクセスできるオブジェクトのセットを持っていますが、これをメモリ内で表現するためにはどのような構造を使用しますか?私が必要とする唯一の操作は、キーを与える値を私に返すファインダーです。例えば多対1マッピングを表すために使用するデータ構造は何ですか?

key: {"a","aa","aaa"}, value {1} 
key: {"b","bb","bbb"}, value {2} 
key: {"c","cc","ccc"}, value {3} 

私はこのようにそれを使用します。

MyStruct.Get["a"]; // return 1 
MyStruct.Get["aa"]; // return 1 
MyStruct.Get["bbb"]; // return 2 
MyStruct.Get["d"]; // return null 
+0

私の知る限り、これはクラスライブラリには存在しません。独自の構造を簡単に作成できます。キーの順序は重要ですか?そのことを念頭に置いてください... –

+0

キーの順序は関係ありません、あらかじめ構築された構造はありませんか? JavaにはHashMapがあります。 – Bill

+0

私はあなたが最初のキーで '' aaa "'を意味したと思います。 –

答えて

2

あなたはDictionaryを使用する必要があります。 そして、あなたはこのようにそれを使用することができます:

Dictionary<string, int> myDict = new Dictionary<string, int>(); 
myDict.Add("a", 1); 
myDict.Add("aa", 1); 
myDict.Add("c", 3); 

int result; 
if (myDict.TryGetValue("a", out result)){ 
    //do something with result 
} 

それとも、このように検索を行うことができます処理鍵パラメータのための独自のクラスを使用している場合

int result1 = myDict["a"]; //throws exception when the value is not present 

は注意してください。その場合は、.Equalsメソッドと.GetHashCodeメソッドをオーバーライドする必要があります。

+0

注意深い文字列は不変です。 "1" <> "1"は参考値です。あなたはそれをはっきりさせるべきです。長い文字列の場合、問題になる可能性があります。 –

+0

また、重複したキーを入力すると、 'Dictionary'が例外をスローします。言及に値する。 –

+0

@FirstStep - デュープキーを入力せず、値を二重にするだけです(私の最初のコメントを考慮した場合)。 –

関連する問題