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é? P>
8 Réponses :
Tu ne peux pas faire quelque chose comme: p>
valeur var = mydiconaire [i]; code>? p>
var stringValue = dictionary[key];
Que voulez-vous dire par le mieux?
Ceci est le standard em> moyen d'accès 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é): p> ou, vous pouvez utiliser Dictionnaire code> par clé: p>
myDICT . Inscrivez-vousValue code>, bien que cela nécessitait l'utilisation d'un paramètre OUT afin d'obtenir la valeur. P> P>
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) code>, alors n'a pas à craindre de vous inquiéter. Quoi qu'il en soit, +1
@Martin, cependant, il nécessite un paramètre out> code> à 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.
string value = dictionary[key];
dictionnaire.trygevalue code> est le moyen le plus sûr
Ou utilisez l'indexateur de dictionnaire comme autre suggéré, mais rappelez-vous d'attraper KeyNotFoundException P>
Si vous savez que la clé est dans le dictionnaire: Si vous n'êtes pas sûr: p> dictionary.TryGetValue(key, out value);
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; code>
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]; } } }
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;