我以前在Ruby中的經驗,並希望學習一種編譯語言,並剛剛拿起C#最近。我想知道C#中的Hashes的Ruby等價物是什麼。例如,我如何在C#中創建一個類似於Ruby哈希的東西?什麼是在C#中的紅寶石哈希的標準等效物 - 如何在C#中創建多維紅寶石像哈希值
x = {"a"=>{"b"=>"c","d"=>["e","f",{"g"=>1}]}
什麼是在C#中創建類似的標準方式?我應該使用散列表,字典或對象嗎?
我以前在Ruby中的經驗,並希望學習一種編譯語言,並剛剛拿起C#最近。我想知道C#中的Hashes的Ruby等價物是什麼。例如,我如何在C#中創建一個類似於Ruby哈希的東西?什麼是在C#中的紅寶石哈希的標準等效物 - 如何在C#中創建多維紅寶石像哈希值
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}]
}
}
感謝,是的,我想知道它怎麼可能創建這樣的哈希值。在C#中,這種類似的東西不可能以更直接的方式實現,因爲JSON的格式類似於混合數據類型。如果你使用C#將精確的散列輸出到json,你會怎麼做? –
@BA檢查編輯。這將*工作*,但是你不應該使用C#。您的最佳行動方案是重新分析您的數據,或者堅持使用動態語言,以適應現實。 – stybl