Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/linq/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 使用键列表初始化新词典_C#_Linq_Dictionary - Fatal编程技术网

C# 使用键列表初始化新词典

C# 使用键列表初始化新词典,c#,linq,dictionary,C#,Linq,Dictionary,我正在初始化一本新词典,并将每一个键一个接一个地放在上面,如下所示: igData = data.Select(x => new Dictionary<string, string> { ["Date"] = x.GetValueOrDefault("DATE"), ["SP"] = x.GetValueOrDefault("SP"), ["IG"] =

我正在初始化一本新词典,并将每一个键一个接一个地放在上面,如下所示:

igData = data.Select(x => new Dictionary<string, string> {
                     ["Date"] = x.GetValueOrDefault("DATE"),
                     ["SP"] = x.GetValueOrDefault("SP"),
                     ["IG"] = x.GetValueOrDefault("IG")}).ToList();
igData=data。选择(x=>newdictionary{
[“日期”]=x.GetValueOrDefault(“日期”),
[“SP”]=x.GetValueOrDefault(“SP”),
[“IG”]=x.GetValueOrDefault(“IG”)}.ToList();
这很好,但是其余的键需要是我在
列表标题中创建的标题

是否可以在上面的初始化中添加此标题列表?大概是这样的:

igData = data.Select(x => new Dictionary<string, string> {
     ["Date"] = x.GetValueOrDefault("DATE"),
     ["SP"] = x.GetValueOrDefault("SP"),
     ["IG"] = x.GetValueOrDefault("IG"),
     headers.Select(y => new KeyValuePair<string, string>
                                             (y, x.GetValueOrDefault["IG"])).ToList();
igData=data。选择(x=>newdictionary{
[“日期”]=x.GetValueOrDefault(“日期”),
[“SP”]=x.GetValueOrDefault(“SP”),
[“IG”]=x.GetValueOrDefault(“IG”),
headers.Select(y=>newkeyvaluepair
(y,x.GetValueOrDefault[“IG”]).ToList();

我知道值是相同的,但这是有意的。上面的内容可能吗?或者这是我想单独使用的内容。在上面这样做是很理想的,因为我可以从
数据
集合中访问值。

您不能在这样的初始值设定项中执行,但我建议您可以使用一点
浓度来执行在
至词典

igData = data.Select(x => {
   return new KeyValuePair<string,string>[]{
          new KeyValuePair<string,string>("Date", x.GetValueOrDefault("DATE")),
          new KeyValuePair<string,string>("SP", x.GetValueOrDefault("SP")),
          new KeyValuePair<string,string>("IG", x.GetValueOrDefault("IG"))
       }.Concat(
          headers.GetHalfHourlyTimeHeaders().Select(y => new KeyValuePair<string, string>
                                             (y, x.GetValueOrDefault["IG"])).ToList()
       ).ToDictionary(k => k.Key, v => v.Value);
});
igData=data。选择(x=>{
返回新的KeyValuePair[]{
新的KeyValuePair(“日期”,x.GetValueOrDefault(“日期”),
新的KeyValuePair(“SP”,x.GetValueOrDefault(“SP”),
新的KeyValuePair(“IG”,x.GetValueOrDefault(“IG”))
}康卡特先生(
headers.GetHalfHourlyTimeHeaders()。选择(y=>new KeyValuePair
(y,x.GetValueOrDefault[“IG”])。ToList()
).ToDictionary(k=>k.Key,v=>v.Value);
});

你不能用那样的初始值设定项,但我建议你可以用一点
Concat
ToDictionary

igData = data.Select(x => {
   return new KeyValuePair<string,string>[]{
          new KeyValuePair<string,string>("Date", x.GetValueOrDefault("DATE")),
          new KeyValuePair<string,string>("SP", x.GetValueOrDefault("SP")),
          new KeyValuePair<string,string>("IG", x.GetValueOrDefault("IG"))
       }.Concat(
          headers.GetHalfHourlyTimeHeaders().Select(y => new KeyValuePair<string, string>
                                             (y, x.GetValueOrDefault["IG"])).ToList()
       ).ToDictionary(k => k.Key, v => v.Value);
});
igData=data。选择(x=>{
返回新的KeyValuePair[]{
新的KeyValuePair(“日期”,x.GetValueOrDefault(“日期”),
新的KeyValuePair(“SP”,x.GetValueOrDefault(“SP”),
新的KeyValuePair(“IG”,x.GetValueOrDefault(“IG”))
}康卡特先生(
headers.GetHalfHourlyTimeHeaders()。选择(y=>new KeyValuePair
(y,x.GetValueOrDefault[“IG”])。ToList()
).ToDictionary(k=>k.Key,v=>v.Value);
});
igData=data。选择(x=>
新字典(headers.GetHalfHourlyTimeHeaders().ToDictionary(y=>y,y=>x.GetValueOrDefault(“IG”))
{
[“日期”]=x.GetValueOrDefault(“日期”),
[“SP”]=x.GetValueOrDefault(“SP”),
[“IG”]=x.GetValueOrDefault(“IG”)
});
查询语法在我看来更好

igData = from x in data
         let ig = x.GetValueOrDefault("IG")
         select new Dictionary<string, string>(headers.GetHalfHourlyTimeHeaders().ToDictionary(y => y, y => ig))
         {
             ["Date"] = x.GetValueOrDefault("DATE"),
             ["SP"] = x.GetValueOrDefault("SP"),
             ["IG"] = ig
         };
igData=从数据中的x开始
设ig=x.GetValuerDefault(“ig”)
选择新字典(headers.GetHalfHourlyTimeHeaders().ToDictionary(y=>y,y=>ig))
{
[“日期”]=x.GetValueOrDefault(“日期”),
[“SP”]=x.GetValueOrDefault(“SP”),
[“IG”]=IG
};
igData=data。选择(x=>
新字典(headers.GetHalfHourlyTimeHeaders().ToDictionary(y=>y,y=>x.GetValueOrDefault(“IG”))
{
[“日期”]=x.GetValueOrDefault(“日期”),
[“SP”]=x.GetValueOrDefault(“SP”),
[“IG”]=x.GetValueOrDefault(“IG”)
});
查询语法在我看来更好

igData = from x in data
         let ig = x.GetValueOrDefault("IG")
         select new Dictionary<string, string>(headers.GetHalfHourlyTimeHeaders().ToDictionary(y => y, y => ig))
         {
             ["Date"] = x.GetValueOrDefault("DATE"),
             ["SP"] = x.GetValueOrDefault("SP"),
             ["IG"] = ig
         };
igData=从数据中的x开始
设ig=x.GetValuerDefault(“ig”)
选择新字典(headers.GetHalfHourlyTimeHeaders().ToDictionary(y=>y,y=>ig))
{
[“日期”]=x.GetValueOrDefault(“日期”),
[“SP”]=x.GetValueOrDefault(“SP”),
[“IG”]=IG
};

与Jamiec的答案类似,但我认为更具可读性(但未测试性能):

List igData=data.选择(x=>
{
var dict=新字典
{
[“日期”]=x.GetValueOrDefault(“日期”),
[“SP”]=x.GetValueOrDefault(“SP”),
[“IG”]=x.GetValueOrDefault(“IG”)
};
//我希望我正确理解GetHalfHourlyTimeHeaders返回列表
foreach(headers.GetHalfHourlyTimeHeaders()中的字符串头)
{
dict.Add(标题,x.GetValueOrDefault(“IG”);
}
返回命令;
}
).ToList();

与Jamiec的答案类似,但我认为更具可读性(但未测试性能):

List igData=data.选择(x=>
{
var dict=新字典
{
[“日期”]=x.GetValueOrDefault(“日期”),
[“SP”]=x.GetValueOrDefault(“SP”),
[“IG”]=x.GetValueOrDefault(“IG”)
};
//我希望我正确理解GetHalfHourlyTimeHeaders返回列表
foreach(headers.GetHalfHourlyTimeHeaders()中的字符串头)
{
dict.Add(标题,x.GetValueOrDefault(“IG”);
}
返回命令;
}
).ToList();
我喜欢这样:

igData =
    data
        .Select(x =>
            Enumerable
                .Concat(
                    headers
                        .GetHalfHourlyTimeHeaders()
                        .Select(k => new { k, v = x.GetValueOrDefault("IG") }),
                    new [] { "Date", "SP", "IG" }
                        .Select(k => new { k, v = x.GetValueOrDefault(k.ToUpper()) }))
                .ToDictionary(z => z.k, z => z.v))
        .ToList();
我喜欢这样:

igData =
    data
        .Select(x =>
            Enumerable
                .Concat(
                    headers
                        .GetHalfHourlyTimeHeaders()
                        .Select(k => new { k, v = x.GetValueOrDefault("IG") }),
                    new [] { "Date", "SP", "IG" }
                        .Select(k => new { k, v = x.GetValueOrDefault(k.ToUpper()) }))
                .ToDictionary(z => z.k, z => z.v))
        .ToList();

数据的类型是什么
/
标题
?为什么要创建这么多字典?你应该使用
字典
扩展名。@ChengChen数据是一个
列表
,标题是
列表
。如果你想要一个KeyValuePair列表,那么使用List而不是dictionary。然后你可以选择使用AddRange()在字典只有add()的情况下一次添加多个项字典的集合总是让我感觉像是UAAAH,是不可理解的。它们趋向于不可预期地增长,因此变得越来越不可维护,特别是当数据结构变得更复杂时,而应该考虑创建具有属性的类。什么类型的< <代码>数据>代码>代码>标题< /代码>?你创建了这么多字典吗?你应该使用
ToDictionary
扩展名。@ChengChen数据是一个
List
,标题是
List
。如果你愿意的话