首页 > 解决方案 > c#dictionary如何将具有重复值的字符串分隔列表中的数据添加到字典中

问题描述

我正在尝试从字符串列表中创建一个字典,其中每个字符串都包含分隔符分隔的值。有许多值被重复,所以我需要一个具有多个值的键

我已经尝试过创建Dictionary<string, List<string>>,但这不起作用

每个字符串都像

values = Man: rev
sum:2
Man: rev2
sum:2

values 是一个字符串列表

var d = new Dictionary<string, List<string>>();

        foreach(var l in values)
        {
            var b = l.Split(':');
            var k = b.ElementAtOrDefault(0);

            if (!d.ContainsKey(k))
                d.Add(k, new List<string>());

            d[k].Add(l);
        }

当我尝试使用上面提到的方法搜索字典时,我无法检索特定键的值

标签: c#dictionary

解决方案


根据提供的评论,我建议使用以下构造(我现在无法测试代码,但可以在需要时修复它):

Dictionary<string,string> result = values
   .Select(v => v.Split(new char[] {':'}, StringSplitOptions.RemoveEmptyEntries)
   .ToLookup(arr => arr.FirstOrDefault(), arr => String.Concat(arr.Skip(1))
   .ToDictionary(g => g.Key, g => String.Join(", ", g.Select(i => i.Trim());

解释:首先 Select 进行拆分;ToLookup 创建 > 结构,使用第一个元素作为键,其余的值字符串作为项目(在原始问题中添加了整个字符串 - 我不确定这是否是意图);ToDictionary 然后将 List 转换为字符串(基于注释,因为所需的输出似乎是 Distionary)


推荐阅读