web-dev-qa-db-fra.com

Java Equivalent de la carte en C #

J'essaie de tenir une liste d'éléments dans une collection avec une clé de mon choix. En Java, j'utiliserais simplement Map comme suit:

class Test {
  Map<Integer,String> entities;

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

Y a-t-il un moyen équivalent de faire cela en C #? System.Collections.Generic.Hashset N'utilise pas de hachage et je ne peux pas définir de clé de type personnalisé System.Collections.Hashtable N'est pas une classe générique
System.Collections.Generic.Dictionary N'a pas de méthode get(Key)

146
anonymous-pek

Vous pouvez indexer Dictionary, vous n'avez pas besoin de 'get'.

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

Un moyen efficace de tester/d'obtenir des valeurs est TryGetValue (merci à Earwicker):

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

Avec cette méthode, vous pouvez rapidement et sans exception obtenir des valeurs (si présentes).

Ressources:

Dictionnaire-Touches

Essayez d'obtenir une valeur

176
boj

Le dictionnaire <,> est l’équivalent. Bien qu'il n'ait pas de méthode Get (...), il possède une propriété indexée appelée Item à laquelle vous pouvez accéder directement en C # en utilisant la notation d'index:

class Test {
  Dictionary<int,String> entities;

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

Si vous souhaitez utiliser un type de clé personnalisé, vous devez envisager d'implémenter IEquatable <> et de remplacer Equals (object) et GetHashCode () à moins que l'égalité par défaut (référence ou struct) ne soit suffisante pour déterminer l'égalité des clés. Vous devez également rendre votre type de clé immuable pour éviter que des choses étranges ne se produisent si une clé est mutée après son insertion dans un dictionnaire (par exemple parce que la mutation a modifié son code de hachage).

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