【问题标题】:How to get same values from different keys in a Dictionary?如何从字典中的不同键获取相同的值?
【发布时间】:2021-02-10 15:58:59
【问题描述】:

新手提醒: 我对使用字典或任何与 KeyValuePair 相关的东西都很陌生。
我有一个字典,我向它添加了一些值。

var first_choice_dict = new Dictionary<string, int>();
名称是键,数字是表示选择的值。

Bob, 2
Chad, 1
Dan, 3
Eden, 5
Fred, 1
Greg, 4
Hope, 2
Ivan, 1
Jim, 2

请问是否有办法按相同的值对它们进行排序,然后仅将键移动到新字典(或者值也应该没问题),如下所示:

已排序

Abe,1
Chad,1
Fred,1
Ivan, 1
......

新选择词典 1
Abe,Chad,Fred,Ivan

【问题讨论】:

  • 您根本不想对它们进行“排序”。您想按值分组,然后构建一个新字典,其中选择是关键,我建议IEnumerable<string>
  • 对于排序字典,您可以使用 SortedDictionarydocs.microsoft.com/en-us/dotnet/api/…
  • @user3026017 SortedDictionary<TKey, TValue> 的文档说 “表示按键排序的键/值对的集合。”,而 OP 的问题是询问排序依据,尽管这似乎也不完全是他们想要做的。
  • 感谢您的回复。 @Tim Schmelter,好吧应该试一试
  • 你想要的是交换键和值。因此,一个值“1”将为您提供相应键的列表。但由于值在原始字典中不是唯一的,因此您必须使用 group by。

标签: c# list dictionary keyvaluepair


【解决方案1】:

您根本不想对它们进行“排序”。您想按值分组,然后构建一个新字典,其中选择是关键,我建议IEnumerable<string>

Dictionary<int, IEnumerable<string>> choiceDict = userChoicesDict
    .GroupBy(kv => kv.Value)
    .ToDictionary(g => g.Key, g => g.Select(kv => kv.Key));

如果您希望使用逗号分隔名称作为值的字符串:

Dictionary<int, string> choiceDict = userChoicesDict
    .GroupBy(kv => kv.Value)
    .ToDictionary(g => g.Key, g => string.Join(",", g.Select(kv => kv.Key)));

【讨论】:

    猜你喜欢
    • 2019-05-11
    • 1970-01-01
    • 2023-02-04
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多