我有一个字符串列表,如下所示:
abc|key1|486997
def|key1|488979
ghi|key2|998788
gkl|key2|998778
olz|key1|045669
我如何使用 LINQ 和 ToDictionary 生成如下所示的 Dictionary<string, List<string>>
key1 : { abc|key1|486997, def|key1|488979, olz|key1|045669 }
key2 : { ghi|key2|998788, gkl|key2|998778 }
基本上我希望能够提取第二个元素作为键,使用 ToDictionary() 一次性创建字典。
我目前正在做这个..
var d = new Dictionary<string, List<string>>();
foreach(var l in values)
{
var b = l.Split('|');
var k = b.ElementAtOrDefault(1);
if (!d.ContainsKey(k))
d.Add(k, new List<string>());
d[k].Add(l);
}
我看过有关从单个分隔值字符串构建字典的问题,但我 想知道在从分隔字符串列表开始时是否有一种优雅的方法来执行此操作。
最佳答案
var list = new []
{
"abc|key1|486997",
"def|key1|488979",
"ghi|key2|998788",
"gkl|key2|998778",
"olz|key1|045669"
};
var dict = list.GroupBy(x => x.Split('|')[1])
.ToDictionary(x => x.Key, x => x.ToList());
您还可以一次性将其转换为查找(与 Dictionary<K,IEnumerable<V>>
非常相似):
var lookup = list.ToLookup(x => x.Split('|')[1]);
关于c# - 使用 LINQ 从分隔字符串列表构建字典,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10436767/