我以前在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