7
votes

Meilleur moyen d'interroger un dictionnaire dans c #

J'ai un dictionnaire, par exemple Dictionnaire .
Quelle serait la meilleure façon d'obtenir la valeur de chaîne si je connais la clé?


0 commentaires

8 Réponses :


3
votes

Tu ne peux pas faire quelque chose comme:

valeur var = mydiconaire [i]; ?


0 commentaires

4
votes
var stringValue = dictionary[key];

0 commentaires

10
votes

Que voulez-vous dire par le mieux?

Ceci est le standard moyen d'accès Dictionnaire par clé: xxx

si la clé n'existe pas , cela lancera une exception, vous voudrez peut-être voir si la clé existe avant de l'obtenir (pas de sécurité): xxx

ou, vous pouvez utiliser myDICT . Inscrivez-vousValue , bien que cela nécessitait l'utilisation d'un paramètre OUT afin d'obtenir la valeur.


6 commentaires

MyDICK.YGetValue est plus efficace car il n'a besoin que de calculer la clé une fois, contrairement à la convention suivie d'un index de l'index qui le fait deux fois.


@Martin: Je parie que cette opération de la recherche clé est O (1) , alors n'a pas à craindre de vous inquiéter. Quoi qu'il en soit, +1


@Martin, cependant, il nécessite un paramètre out> à préalablement déclaré.


@zerkms, la recherche clé pourrait être O (1) mais qui ajoute toujours. En outre, GetHashCode pourrait être O (n'importe quoi) car cela est mis en œuvre dans la catégorie de la clé.


@ODED personnellement, j'aurais une méthode d'extension sur les dictionnaires getvalueordfault (clé) qui utilise en interne trygetvalue et renvoie la valeur par défaut de valeur si aucun élément de ce type n'est présent.


@Martin - sonne comme une belle méthode d'extension.



3
votes
string value = dictionary[key];

0 commentaires

2
votes

dictionnaire.trygevalue est le moyen le plus sûr Ou utilisez l'indexateur de dictionnaire comme autre suggéré, mais rappelez-vous d'attraper KeyNotFoundException


0 commentaires

19
votes

Si vous savez que la clé est dans le dictionnaire: xxx pré>

Si vous n'êtes pas sûr: p>

dictionary.TryGetValue(key, out value);


1 commentaires

Si vous souhaitez vérifier la valeur, vous pouvez rapidement dire que quelque chose mentez ce si (! Dic.trygetvalue (clé, objet OUT O) || o == null) retour;



2
votes

Eh bien je ne suis pas tout à fait sûr de ce que vous demandez ici, mais je suppose que c'est à propos d'un dictionnaire?

Il est assez facile d'obtenir la valeur de chaîne si vous connaissez la clé. P>

public class MyClass
{
  private Dictionary<string, string> myDictionary;

  public string this[string key]
  {
    get { return myDictionary[key]; }
  }
}


0 commentaires

5
votes

Si vous souhaitez interroger contre une collection de dictionnaire, vous pouvez procéder comme suit:

var evenNumbers =
      from n in numbers
      where (n.Key % 2) == 0
      select n.Value;


0 commentaires