首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >修改字典条目上的重复键值(C#)

修改字典条目上的重复键值(C#)
EN

Stack Overflow用户
提问于 2017-02-21 23:42:20
回答 6查看 168关注 0票数 0

我有一个使用字典来存储"key=value“对的需求,但是现在我需要存储”重复的“键值。

我有一行分隔的文本(用竖线字符("|")分隔),我将其拆分成一个数组,然后放入一个字典(如下所示)

代码语言:javascript
运行
复制
string[] t = rawMessage.Split(new[] { '|', '|' }, StringSplitOptions.RemoveEmptyEntries);
            message = t.ToDictionary(s => s.Split('=')[0], s => s.Split('=')[1]);

如果不存在重复的键,但我想以一种在插入前调整键值的方式来存储重复的键,则可以很好地执行此操作。

示例

代码语言:javascript
运行
复制
A=1|B=2|C=3|D=4|D=5|D=5

我希望将键值调整为类似以下内容:

代码语言:javascript
运行
复制
A=1
B=2
C=3
D=4
D[1]=5
D[2]=5

因此,我可以拉出第二个和第三个"D“条目的条目,因为它们具有新的键值。

每个副本都是一个唯一的记录,因此我希望能够按照它们输入的顺序进行引用。例如,第四个条目将是D4。建议对所有值使用相同的键值,可能/将会令人困惑,我可能最终会提取错误的信息(但会记住这一点)。

我希望避免事先遍历数组,并且想知道是否有人知道我可以在上面代码的ToDictionary部分执行此操作的方法。

对于相当基本的解释,我深表歉意。许多线程都在处理删除字典中的重复项,我知道这不是字典的预期用途。

EN

回答 6

Stack Overflow用户

发布于 2017-02-21 23:45:08

如果您想要将多个值与一个键相关联,您可以只将该值对的一部分作为列表:

代码语言:javascript
运行
复制
var dict = new Dictionary<char, List<int>>();

char key = 'D';
int value = 5;

if (!dict.ContainsKey(key))
    dict[key] = new List<int>();
dict[key].Add(value);
票数 5
EN

Stack Overflow用户

发布于 2017-02-22 00:03:04

您可以使用GroupBy按键对结果集进行分组,然后使用SelectMany,使用Select方法overload with index参数投影所需的键来展平分组:

代码语言:javascript
运行
复制
var message = t
    .Select(s => s.Split('='))
    .GroupBy(s => s[0], s => s[1])
    .SelectMany(g => g.Select((v, i) => new
    {
        Key = i == 0 ? g.Key : g.Key + "[" + i + "]",
        Value = v
    }))
    .ToDictionary(e => e.Key, e => e.Value);
票数 3
EN

Stack Overflow用户

发布于 2017-02-21 23:50:39

您可以使用带有基于集合的值的字典:

代码语言:javascript
运行
复制
Dictionary<string, List<int>>

然后,您可以为所需的作业使用最好的数据结构,但List<>是一个很好的默认设置。

或者,您可以使用Lookup<TKey, TElement>类,但这不会给出值元素的数组索引:

代码语言:javascript
运行
复制
Lookup<string, int>

它支持键下的分组(因此是TElement的枚举)。它的文档是here

或者,使用您自己的数据结构,但这不太可能是必需的-现有事物的组合可能对您来说足够好。

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/42371764

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档