Comment initialiser un dictionnaire contenant des listes de dictionnaires?
Je commence à faire un peu de développement en C#, et je suis coincé avec un problème ici. D'habitude j'développer en Python où des trucs comme cela est en train d'être mises en œuvre facilement (au moins pour moi), mais je n'ai aucune idée de comment faire cela en C#:
Je veux créer un dictionnaire contenant une liste de dictionnaires comme la suite de l'utilisation de Générique Collections:
{ "alfred", [ {"age", 20.0}, {"height_cm", 180.1} ],
"barbara", [ {"age", 18.5}, {"height_cm", 167.3} ],
"chris", [ {"age", 39.0}, {"height_cm", 179.0} ]
}
J'ai commencé avec les éléments suivants:
using System.Collections.Generic;
Dictionary<String, Dictionary<String, double>[]> persons;
Mais j'aimerais ensuite insérez les trois enregistrements à partir de ci-dessus à la fois dans les personnes. Je suis coincé avec des erreurs de syntaxe dans tous les sens.
Que quelqu'un a une solution pour moi?
Edit:
Merci à vous tous - je ne m'attendais pas à recevoir autant de bien la pensée de réponses en si peu de temps! Vous êtes une grande!
- Aller lire le manuel! 🙂
- Votre principal problème est que vous voulez écrire python en C#. C# est principalement statiquement typé, et vous devez prendre avantage de cela. Vous pouvez utiliser
dynamic
et quelque chose comme expando objet pour obtenir un comportement similaire à typées dynamiquement langues. Mais idiomatiques C# utilise le typage statique avec des classes qui définissent vos membres au lieu de dictionnaires. Votre extérieur dictionnaire est très bien, votre intérieur dictionnaire est laid, car il devrait être d'une classe.
Vous devez vous connecter pour publier un commentaire.
Vous pouvez utiliser dictionnaire initialise. Pas élégant, Python, mais pourrait vivre avec:
Et puis:
Notez également que vous devez
Dictionary<string, Dictionary<string, double>>
de cette structure et de ne pasDictionary<string, Dictionary<string, double>[]>
.Également de travailler avec une telle structure pourrait être un peu de pain PITA et de nuire à la lisibilité et le type de compilation de la sécurité du code.
Dans .NET, il est préférable de travailler avec des objets fortement typés, comme ceci:
et puis:
et puis vous pouvez utiliser LINQ pour récupérer toutes les informations dont vous avez besoin:
À noter bien sûr que l'utilisation de collections ne serait pas aussi rapide qu'une table de hachage de recherche, mais en fonction de vos besoins en termes de performance on peut aussi vivre avec ça.
using MyDict = System.Collections.Generic.Dictionary<string, double>;
?Person
classe au lieu de dictionnaires.using System.Collections.Generic
.À mon humble avis la solution la plus élégante façon de le faire en c#, pour éviter cela, l'utilisation du Dictionnaire, c# a de meilleures options que cela,
est de créer un classe (ou structure) comme
Person
et de mettre ces objets dans une liste générique ou d'une collection qui met en œuvre IEnumerable
Et l'utilisation Linq pour obtenir la personne que vous voulez
Vous pouvez facilement le faire:
Vous serait mieux d'utiliser tapé personne, bien, ou un ExpandoObject pour donner tapé la syntaxe d'accès au dictionnaire.