Y at-il une bonne façon en C# pour imiter la syntaxe python suivant:C# façon à imiter Python Dictionnaire Syntaxe
mydict = {}
mydict["bc"] = {}
mydict["bc"]["de"] = "123"; # <-- This line
mydict["te"] = "5"; # <-- While also allowing this line
En d'autres termes, je voudrais quelque chose avec un accès de style [] qui peut renvoyer soit un autre dictionnaire ou un type de chaîne, selon la façon dont il a été défini.
J'ai essayé de travailler avec une classe personnalisée, mais je n'arrive pas à réussir. Des idées?
Merci!
Edit: Je suis méchant, je sais. La solution de Jared Par est géniale. . . pour un dictionnaire à deux niveaux de ce formulaire. Cependant, je suis également curieux de connaître d'autres niveaux. . . par exemple,
mydict["bc"]["df"]["ic"] = "32";
Et ainsi de suite. Des idées à ce sujet?
Edit 3:
Voici la dernière classe, je fini par utiliser:
class PythonDict {
/* Public properties and conversions */
public PythonDict this[String index] {
get {
return this.dict_[index];
}
set {
this.dict_[index] = value;
}
}
public static implicit operator PythonDict(String value) {
return new PythonDict(value);
}
public static implicit operator String(PythonDict value) {
return value.str_;
}
/* Public methods */
public PythonDict() {
this.dict_ = new Dictionary<String, PythonDict>();
}
public PythonDict(String value) {
this.str_ = value;
}
public bool isString() {
return (this.str_ != null);
}
/* Private fields */
Dictionary<String, PythonDict> dict_ = null;
String str_ = null;
}
Cette classe fonctionne pour des niveaux infinis, et peut être lu à partir sans conversion explicite (dangereux, peut-être, mais bon).
Utilisation comme ceci:
PythonDict s = new PythonDict();
s["Hello"] = new PythonDict();
s["Hello"]["32"] = "hey there";
s["Hello"]["34"] = new PythonDict();
s["Hello"]["34"]["Section"] = "Your face";
String result = s["Hello"]["34"]["Section"];
s["Hi there"] = "hey";
Merci beaucoup Jared Par!
Très bien fait. Je déteste ces conversions implicites, mais cela vous permet certainement de faire ce que l'OP veut. –
Excellente solution pour 1 ou 2 clés. . . J'aime ça pour ça, et ça marcherait probablement dans mon cas (donc merci beaucoup!). Cependant, je suis également curieux au sujet des dictionnaires plus profonds. Des idées là-bas? –
Ouais, c'était très extensible. La classe résultante est montrée en question. Merci beaucoup! –