Có cách nào tốt bằng C# để bắt chước cú pháp python sau:C# cách để bắt chước Python điển Cú pháp
mydict = {}
mydict["bc"] = {}
mydict["bc"]["de"] = "123"; # <-- This line
mydict["te"] = "5"; # <-- While also allowing this line
Nói cách khác, tôi muốn một cái gì đó với [] truy cập phong cách mà có thể trở lại một trong hai khác từ điển hoặc loại chuỗi, tùy thuộc vào cách nó được đặt.
Tôi đã cố gắng để làm việc này với một lớp tùy chỉnh nhưng dường như không thể thành công. Bất kỳ ý tưởng?
Cảm ơn!
Chỉnh sửa: Tôi xấu xa, tôi biết. Giải pháp của Jared Par thật tuyệt vời. . . cho từ điển 2 cấp của biểu mẫu này. Tuy nhiên, tôi cũng tò mò về các cấp độ tiếp theo. . . ví dụ:
mydict["bc"]["df"]["ic"] = "32";
Và cứ tiếp tục như vậy. Bất kỳ ý tưởng về điều đó?
Sửa 3:
Đây là lớp học cuối cùng tôi đã kết thúc bằng:
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;
}
Lớp này làm việc cho cấp độ vô hạn, và có thể được đọc từ mà không cần chuyển đổi rõ ràng (nguy hiểm, có thể, nhưng hey).
Cách sử dụng như sau:
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";
Thank you very much Jared Mệnh!
Rất độc đáo được thực hiện. Tôi ghét những chuyển đổi tiềm ẩn này, nhưng nó chắc chắn cho phép bạn làm những gì mà OP muốn. –
Giải pháp tuyệt vời cho 1 hoặc 2 phím. . . Tôi thích nó cho điều đó, và nó có thể sẽ làm việc trong trường hợp của tôi (vì vậy cảm ơn bạn rất nhiều!). Tuy nhiên, tôi cũng tò mò về các từ điển sâu hơn. Có ý tưởng nào không? –
Yup, nó đã được mở rộng rất nhiều. Lớp kết quả được hiển thị trong câu hỏi. Cảm ơn nhiều! –