web-dev-qa-db-ger.com

Java Kartenäquivalent in C #

Ich versuche, eine Liste von Objekten in einer Sammlung mit einem Schlüssel meiner Wahl zu speichern. In Java würde ich Map einfach wie folgt verwenden:

class Test {
  Map<Integer,String> entities;

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

Gibt es eine äquivalente Möglichkeit, dies in C # zu tun? System.Collections.Generic.Hashset Verwendet kein Hash und ich kann keinen benutzerdefinierten Typschlüssel definieren System.Collections.Hashtable Ist keine generische Klasse
System.Collections.Generic.Dictionary Hat keine get(Key) -Methode

146
anonymous-pek

Sie können Dictionary indizieren, Sie brauchten kein 'get'.

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

Eine effiziente Methode zum Testen/Abrufen von Werten ist TryGetValue (Dank an Earwicker):

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

Mit dieser Methode können Sie schnell und ohne Ausnahme Werte abrufen (falls vorhanden).

Ressourcen:

Dictionary-Keys

Try Get Value

176
boj

Dictionary <,> ist das Äquivalent. Obwohl es keine Get (...) -Methode gibt, gibt es eine indizierte Eigenschaft namens Item, auf die Sie in C # direkt mit der Indexnotation zugreifen können:

class Test {
  Dictionary<int,String> entities;

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

Wenn Sie einen benutzerdefinierten Schlüsseltyp verwenden möchten, sollten Sie in Betracht ziehen, IEquatable <> zu implementieren und Equals (object) und GetHashCode () zu überschreiben, es sei denn, die Standardgleichheit (reference oder struct) reicht aus, um die Schlüsselgleichheit zu bestimmen. Sie sollten Ihren Schlüsseltyp auch unveränderlich machen, um zu verhindern, dass seltsame Dinge passieren, wenn ein Schlüssel mutiert wird, nachdem er in ein Wörterbuch eingefügt wurde (z. B. weil die Mutation dazu geführt hat, dass sich sein Hash-Code geändert hat).

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