簡體   English   中英

什么是 Javascript 鍵/值對數組的 C# 等價物

[英]What is the C# equivalent of a Javascript array of key/value pairs

這在javascript中代表什么:

[["January", 10], ["February", 8], ["March", 4], ["April", 13], ["May", 17], ["June", 9]]

其次,什么是 C# 等價物?

數組數組?? 但是每個內部數組本質上都是一個鍵/值對,所以這是不對的。

如何在 C# 中生成這個 JS 對象?

如果它是地圖,那么 C# 中高效查找的等效項將是Dictionary<TKey, TValue>

var months = new Dictionary<string, int>()
{
    {"January", 1}, {"February", 2}, {"March", 3},
    {"April", 4}, {"May", 5}, {"June", 6}
};

現在,如果它是一個元組數組,C# 7 有原生元組支持:

var months = new[] 
{
    ("January", 1), ("February", 2), ("March", 3),
    ("April", 4), ("May", 5), ("June", 6)
};

你甚至可以像這樣命名元組的成員:

var months = new (string Name, int Number)[]
{
    ("January", 1), ("February", 2), ("March", 3),
    ("April", 4), ("May", 5), ("June", 6)
};

Console.WriteLine(months[0].Name);

它的Dictionary

Syntax: Dictionary<TKey, TValue>

var myDictionary = new Dictionary<int, string>();
myDictionary.Add(10, "January");
myDictionary.Add(8, "February");
myDictionary.Add(4, "March");
myDictionary.Add(13, "April");
myDictionary.Add(17, "May");

你也可以有一個KeyValuePairs List

var list = new List<KeyValuePair<string, int>>()
{
    new KeyValuePair<string, int>("January", 10),
    new KeyValuePair<string, int>("February", 8),
    new KeyValuePair<string, int>("March", 4),
    new KeyValuePair<string, int>("April", 13),
    new KeyValuePair<string, int>("May", 17),
};

那么List<KeyValuePair<T1, T2>>Dictionary<T1, T2>什么區別?

答案是 List 不強制 Key 的唯一性。

這意味着您可以使用ListKeyValuePair執行此操作。

//Record with same key
new KeyValuePair<string, int>("May", 17),
new KeyValuePair<string, int>("May", 17),

但是你不能用Dictionary來做

    myDictionary.Add(17, "May");
    myDictionary.Add(17, "May"); //ERROR
[["January", 10], ["February", 8], ["March", 4], ["April", 13], ["May", 17], ["June", 9]]

這在javascript中代表什么:

那么[]表示一個數組。 所以外部是一個數組。 由於每個數組元素也由[]分隔,因此每個元素也是一個數組。

其次,什么是 C# 等價物?

那么務實,你不能分配值的話,這會導致編譯時錯誤。 如果您使用 Json.Net 之類的東西將其轉換為 ac# 對象,那么絕對最接近的事物(外部 -> 內部)將是鋸齒狀數組

object[][]

通常鋸齒狀數組並不是那么有用。 在這種情況下,我的意見是將數組轉換為List<DateTime>因為列表更容易使用,而且每個數組元素似乎都包含一個月和一天,作為 DateTime 對象更容易使用.

這在javascript中代表什么:

它可以是地圖:

let m = new Map([["February", 8], ["March", 4], ["April", 13]])

或者只是數組數組:

let a = [["February", 8], ["March", 4], ["April", 13]];

其次,什么是 C# 等價物?

它可以是Dictionary<string, int>或數組數組

在 Javascript 中,它是一個數組數組: 在此處輸入圖片說明

由於 C# 是一種強類型語言,因此不推薦使用當前形式表示這些數據,但您可以,就像 ErikPhillips 在下面的評論中所說的那樣,如下所示:

object[] array1 = { "February", 8 };

由於“外部”數組是字符串和整數兩種類型的數組,因此在類似於下面的 C# 代碼中創建每個月日數組元素的“模型”將是更傳統的強類型 C# 最佳實踐,因為 C# 數組更常見的是一種類型的數組,例如一個字符串數組或一個 int 數組,或者在下面的代碼中,傳統的強類型 C# 一個 MonthDayModel 數組:

public class TestClass {

    public TestClass(){
        MonthDayModel[] arr = new MonthDayModel[10];
        arr[0] = new MonthDayModel() {
            Month = "February",
            Day = 8
        };
        arr[1] = new MonthDayModel() {
            Month = "March",
            Day = 4
        };
        //...
    }
}

public class MonthDayModel {
    public string Month { get; set; }
    public int Day { get; set; }
}

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

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