Obtenir le premier élément à partir d'un dictionnaire
J'ai la déclaration suivante:
Dictionary<string, Dictionary<string, string>> like = new Dictionary<string, Dictionary<string, string>>();
J'ai besoin d'obtenir le premier élément, mais ne connaissez pas la clé ou la valeur. Quelle est la meilleure façon de le faire?
- Définir "première" pour un dictionnaire.
- Les dictionnaires sont non-ordonnée.
- Essayez FirstOrDefault();
- Liées (rien de moins que Skeet): stackoverflow.com/q/436954/1001985
- À l'aide de (Premier) fait sens quand vous savez il n'y a qu'un seul élément dans le dictionnaire, parce que vous avez fait .Compter sur le dictionnaire. Ensuite, vous n'avez pas besoin de faire une boucle foreach sur un article, il suffit d'utiliser la fonction Premier()
- C'est exactement la façon dont j'utilise cette solution. Merci pour le niveau de la tête à propos de l'OP de la question.
- Pourrait également utiliser Seul() ou SingleOrDefault() au lieu de (Première), si vous savez qu'il n'a qu'un seul élément.
Vous devez vous connecter pour publier un commentaire.
Noter que pour appeler
First
ici est fait pour appeler une extension Linq de IEnumerable, qui est mis en œuvre parDictionary<TKey,TValue>
. Mais pour un Dictionnaire, le "premier" n'a pas une signification bien définie. Selon cette réponse, le dernier élément ajouté finit par être la "Première" (en d'autres termes, il se comporte comme un Pile), mais que la mise en œuvre est spécifique, il n'est pas le garanti comportement. En d'autres termes, à assumer vous allez obtenir tout élément défini par l'appel de Première serait à mendier pour les mal-à l'aide, il doit être traité comme s'apparente à l'obtention d'une aléatoire élément dans le Dictionnaire, comme l'a noté Bobson ci-dessous. Cependant, parfois, c'est utile, que vous avez juste besoin tout élément dans le Dictionnaire.Suffit d'utiliser Linq
First()
:Notez que l'utilisation de
First
sur un dictionnaire vous donne unKeyValuePair
, dans ce casKeyValuePair<string, Dictionary<string,string>>
.Notez également que vous pourrait tirer un sens précis de l'utilisation de
First
en le combinant avec LinqOrderBy
:val
à sa juste valeur (puisque c'est une chaîne de caractères), mais je suppose qu'il a été rejeté?Dictionary<string, string>
, etlike
est unDictionary<string, Dictionary<string, string>>
.First
sur unDictionary
ne signifie pas que vous avez réellement obtenu le premier élément dans le dictionnaire. Vous avez obtenu un dans le dictionnaire, mais pas le premier élément. Il n'est pas premier élément, parce que les dictionnaires sont non-ordonnée. Ce type de réponse de plus en plus néfaste pour l'OP car ils continueront à croire qu'ils sont en fait obtenir la "première" de l'élément, même si aucune une telle chose existe. La bonne réponse à la question est qu'il n'est pas premier élément.First
sur un dictionnaire en vaut la peine: Lorsque vous souhaitez accéder à une propriété de la clé ou la valeur des objets qui devraient être les mêmes sur l'ensemble (c'est à dire une référence arrière à la société mère dans un dictionnaire pour les enfants).OrderBy()
..OrderBy
et commander ce que vous voulez est sur le dessus, oui, vous avez de la première. Et si vous venez d'avoir un dictionnaire d'un élément, Iike je faisais, vous êtes aussi se le premier.Pour ceux qui viennent de ce que veut une linq-moins de façon à obtenir un élément à partir d'un dictionnaire
Je ne suis pas sûr si c'est la mise en œuvre spécifique, mais si votre Dictionnaire n'a pas tous les éléments,
Current
contiendra unKeyValuePair<string, string>
où à la fois la clé et la valeur sontnull
.(J'ai regardé la logique derrière linq
First
méthode pour arriver à cela, et testé parLinqPad 4
)IDisposable
objets, de sorte que vous devriez utiliserusing
construire ici.Si vous pouvez utiliser
First()
, les Dictionnaires n'ont pas d'ordre en soi. Veuillez utiliser OrderedDictionary à la place. Et ensuite vous pouvez faireFirstOrDefault
. De cette manière, il sera significative.Dictionary
, vous n'avez aucune idée de ce que c'est, à la différence d'un ordre dictionnaire auquel casFirst
a une valeur raisonnable.EDIT:
Utiliser un OrderedDictionary.
Il est préférable d'utiliser
FirstOrDefault()
pour récupérer la première valeur.Ex:
FirstOrDefault()
est ce que ça va donner une valeur par défaut si aucun n'est présent dans le dictionnaire.orderedDictionary
de sens que pour les "Premières".Dictionnaire ne définit pas les éléments dans l'ordre. Si vous avez juste besoin d'un élément d'utiliser
Keys
ouValues
propriétés de dictionnaire de choisir un.using System.Linq
dans votre à l'aide de directivesmal à trouver moyen facile de trouver le premier élément du Dictionnaire 🙂