簡體   English   中英

什么是C#中的Ruby哈希的標准等效項-如何在C#中創建像Ruby這樣的多維Ruby哈希

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM