[英]What is the standard equivalent of Ruby Hash in C# - How to create a multi dimensional Ruby like hash in C#
我以前有Ruby的經驗,想學習一種編譯語言,最近才開始學習C#。 我想知道什么是C#中的哈希的Ruby等效項。 例如,如何在C#中創建類似於下面的Ruby哈希的東西?
x = {"a"=>{"b"=>"c","d"=>["e","f",{"g"=>1}]}
在C#中創建這樣的東西的標准方法是什么? 我應該使用哈希表,字典還是對象?
簡短的回答:沒有。
長答案:
與C#最接近的等效項是Dictionary
。
您可以這樣使用它:
var myDict = new Dictionary<string, int>();
// Adding values
myDict.Add("foo", 3);
myDict["bar"] = 8; // Alternative syntax
// Getting values
int bar = myDict["bar"];
bool fooExists = myDict.ContainsKey("foo"); // true
// Safe get
int foo;
bool ableToGetFoo = myDict.TryGetValue("foo", out foo);
// Splitting
var allKeys = myDict.Keys;
var allValues = myDict.Values;
但是, 這對您不起作用 。 至少不是以任何直接的方式。
您必須意識到C#是一種強類型語言。 這意味着C#的字典與所有其他集合一樣都有局限性:所有元素都必須是同一類型。 這意味着所有鍵的類型必須彼此相同,並且所有值的類型也必須彼此相同。 這就是強類型語言工作的方式。
如果要在C#中重新創建示例,則必須定義一個自定義數據結構來容納它。 但是,示例中存在的所有嵌套都將帶來挑戰。 它的某些元素,例如此特定位:
["e","f",{"g"=>1}]
..完全不可能。 數組或列表不能具有完全不同類型的元素。
這是我嘗試創建類似於您的示例的內容:
var x = new Dictionary<string, Dictionary<string, List<string>>>()
{
{
"a", new Dictionary<string, List<string>>()
{
{"b", ["c"]},
{"d", ["e", "f", "g"]}
}
},
};
編輯:為了使用JSON,您需要采用基於類的方法。 它看起來像這樣:
public class A
{
public string b { get; set; }
public List<object> d { get; set; }
}
public class RootObject
{
public A a { get; set; }
}
以及相應的JSON(示例中的直接翻譯):
{
"a": {
"b":"c",
"d":["e", "f", {"g":1}]
}
}
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.