C# 中 Ruby 哈希的标准等价物是什么 - 如何在 C# 中创建多维 Ruby 类哈希



我以前有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}]
}
}

最新更新