C'è un buon modo in C# per imitare la seguente sintassi di Python:C# modo di imitare Python dizionario Sintassi
mydict = {}
mydict["bc"] = {}
mydict["bc"]["de"] = "123"; # <-- This line
mydict["te"] = "5"; # <-- While also allowing this line
In altre parole, mi piacerebbe qualcosa con [] accesso stile che può restituire sia un'altra dizionario o un tipo di stringa, a seconda di come è stato impostato.
Ho cercato di risolvere questo problema con una classe personalizzata ma non riesco a riuscire. Qualche idea?
Grazie!
Modifica: Sono malvagio, lo so. La soluzione di Jared Par è fantastica. . . per un dizionario di 2 livelli di questo modulo. Tuttavia, sono anche curioso di ulteriori livelli. . . ad esempio,
mydict["bc"]["df"]["ic"] = "32";
E così via. Qualche idea al riguardo?
Edit 3:
Ecco la classe finale ho finito per usare:
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;
}
Questa classe funziona per infiniti livelli, e può essere letto da senza conversione esplicita (pericoloso, forse, ma hey).
Uso in questo modo:
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";
ringrazio molto Jared Par!
molto ben fatto. Odio queste conversioni implicite, ma certamente ti permette di fare ciò che l'OP vuole. –
Ottima soluzione per 1 o 2 chiavi. . . Mi piace per quello, e probabilmente funzionerebbe nel mio caso (quindi grazie mille!). Tuttavia, sono anche curioso di dizionari più profondi. Qualche idea lì? –
Sì, era molto estensibile. La classe risultante è mostrata in questione. Grazie mille! –