繁体   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