web-dev-qa-db-ja.com

Java C#の同等のマップ

コレクション内のアイテムのリストを選択したキーで保持しようとしています。 Javaでは、次のようにMapを使用します。

class Test {
  Map<Integer,String> entities;

  public String getEntity(Integer code) {
    return this.entities.get(code);
  }
}

C#でこれを行う同等の方法はありますか? System.Collections.Generic.Hashsetはハッシュを使用せず、カスタムタイプキーを定義できませんSystem.Collections.Hashtableはジェネリッククラスではありません
System.Collections.Generic.Dictionaryにはget(Key)メソッドがありません

146
anonymous-pek

辞書にインデックスを付けることができます。「get」は必要ありませんでした。

Dictionary<string,string> example = new Dictionary<string,string>();
...
example.Add("hello","world");
...
Console.Writeline(example["hello"]);

値をテスト/取得する効率的な方法はTryGetValueです(Earwickerに感謝):

if (otherExample.TryGetValue("key", out value))
{
    otherExample["key"] = value + 1;
}

この方法を使用すると、高速で例外のない値を取得できます(存在する場合)。

リソース:

辞書キー

値を取得しよう

176
boj

Dictionary <、>は同等です。 Get(...)メソッドはありませんが、インデックス表記を使用してC#で直接アクセスできるItemというインデックス付きプロパティがあります。

class Test {
  Dictionary<int,String> entities;

  public String getEntity(int code) {
    return this.entities[code];
  }
}

カスタムキータイプを使用する場合、デフォルト(参照または構造)の同等性がキーの同等性を判断するのに十分でない限り、IEquatable <>の実装とEquals(object)およびGetHashCode()のオーバーライドを検討する必要があります。また、キーが辞書に挿入された後にキーが変更された場合に奇妙なことが起こるのを防ぐために、キータイプを不変にする必要があります(たとえば、変更によりハッシュコードが変更されたため)。

17
Dave
class Test
{
    Dictionary<int, string> entities;

    public string GetEntity(int code)
    {
        // Java's get method returns null when the key has no mapping
        // so we'll do the same

        string val;
        if (entities.TryGetValue(code, out val))
            return val;
        else
            return null;
    }
}
10
LukeH