我有一个数据源,其中包含3个不同的值,如下所示,
List<Configuration> lst = new List<Configuration>
{
new Configuration{Name="A", Config="X", Value="1"},
new Configuration{Name="A", Config="X", Value="2"},
new Configuration{Name="B", Config="Y", Value="2"}
};
public class Configuration
{
public string Name { get; set; }
public string Config { get; set; }
public string Value { get; set; }
}
Run Code Online (Sandbox Code Playgroud)
在这里,我想迭代到整个源,并希望将"Name"值保持为KEY,将"Config"和"Value"保存为"NameValueCollection".
为此,我正在拿一本如下的字典,
var config = new Dictionary<string, NameValueCollection>();
Run Code Online (Sandbox Code Playgroud)
但是在添加到这本词典时,我遇到了2个问题,
foreach(var c in lst)
{
config.Add(c.Name, new NameValueCollection { c.Config, c.Value });
}
Run Code Online (Sandbox Code Playgroud)
注意 - 我希望X和1都是1(如果是重复键)
有没有更好的C#集合或如何解决上述错误.
谢谢!
您可以使用查找字典(它表示将键映射到多个值的集合):
var config = lst.GroupBy(cfg => cfg.Name)
.ToDictionary(g => g.Key,
g => g.ToLookup(cfg => cfg.Config, cfg => cfg.Value));
Run Code Online (Sandbox Code Playgroud)
配置类型将是
Dictionary<string, ILookup<string, string>>
Run Code Online (Sandbox Code Playgroud)
访问值:
config["A"]["X"] // gives you IEnumerable<string> with values ["1","2"]
Run Code Online (Sandbox Code Playgroud)
尝试这个:
List<Configuration> lst = new List<Configuration>
{
new Configuration{Name="A", Config="X", Value="1"},
new Configuration{Name="A", Config="X", Value="2"},
new Configuration{Name="B", Config="Y", Value="2"}
};
var config = new Dictionary<string, NameValueCollection>();
NameValueCollection temp = new NameValueCollection();
foreach (var c in lst)
{
if(config.TryGetValue(c.Name, out temp)){
config[c.Name].Add(c.Config,c.Value);
}
else{
config.Add(c.Name, new NameValueCollection { {c.Config,c.Value } });
}
}
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
981 次 |
| 最近记录: |