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
。如果你愿意的话