C#:词典转换为词典

第一Dictionary就像是

Dictionary<String, String> ParentDict = new Dictionary<String, String>(); ParentDict.Add("A_1", "1"); ParentDict.Add("A_2", "2"); ParentDict.Add("B_1", "3"); ParentDict.Add("B_2", "4"); ParentDict.Add("C_1", "5");

我需要将其转换成一个新的Dictionary<String, Dictionary<String,String>>

其结果将包含

Key Value Key Value _________________________________________________ "A" "A_1" "1" "A_2" "2" "B" "B_1" "1" "B_2" "2" "C" "C_1" "1"

现在,我使用nested for loop来做到这一点。

我怎样才能做到这一点使用LNQLAMBDA Expression

--------------解决方案-------------

var result = ParentDict.GroupBy(p => p.Key[0].ToString())
.ToDictionary(g => g.Key, g => g.ToDictionary(x => x.Key, x => x.Value));

尝试:

var result = from p in ParentDict
group p by p.Key[0] into g
select new { Key = g.Key, Value = g };

这应该给你的{键,值},其中关键是“A”,“B”,“C”等名单和值将KeyValuePair从ParentDict的原始实例。

你可以找到更多的LINQ查询示例此MSDN页:101 LINQ的样本

要做到这一点,我怀疑的原因是因为你需要能够查找所有条目的特定键字母。 在这种情况下,一Lookup是一个更好的匹配,一般为:

var letterLookup = ParentDict.ToLookup(kv=>kv.Key[0]);

可用这样的:

//letterLookup['A'] is an IEnumerable<KeyValuePair<string,string>>...

Console.WriteLine(string.Join(", ",
letterLookup['A'].Select(kv=>kv.ToString()).ToArray()
)); // [A_1, 1], [A_2, 2]

Console.WriteLine(new XElement("root",
letterLookup['B'].Select(kv=>new XElement(kv.Key,kv.Value))
));// <root><B_1>3</B_1><B_2>4</B_2></root>

Console.WriteLine(letterLookup['B'].Any()); //true
Console.WriteLine(letterLookup['Z'].Any()); //false

查找过字典的优点是,它可以包含多个值为任何给定键(辞典不同),并且它具有当某一键不存在一致的API:它然后返回空枚举,而含词典可枚举可能要么抛出KeyNotFoundException,或返回null,或返回空枚举,一切取决于你如何创建它。

分类:C# 时间:2015-03-15 人气:0
分享到:

相关文章

Copyright (C) 55228885.com, All Rights Reserved.

55228885 版权所有 京ICP备15002868号

processed in 0.554 (s). 10 q(s)