c# - 如何使用 LinQ 按值分组获取字典中的键列表

好的,这是一个简单的字典

Dictionary<string,int> dicClusters=new Dictionary<string,int>();

dicClusters.Add("A",1);
dicClusters.Add("B",1);
dicClusters.Add("C",2);
dicClusters.Add("D",3);

所以我想从中组成如下列表

  List<List<string>> lstGroupedByKeys=dicClusters.GroupBy(pr => pr.Value)...

结果会是

first list {"A","B"}
second list {"C"}
third list {"D"}

我可以用多个 foreach 或使用 for 循环对其进行编码,但我相信它可以用 linQ 完成,我想学习 ty

c#.NET 4.5.2

最佳答案

GroupBy 是正确的方法,但您需要另一个 Select 来定义每个组的表示方式:

List<List<string>> lstGroupedByKeys =
    dicClusters.GroupBy(pr => pr.Value)
               .Select(g => g.Select(pr => pr.Key).ToList())
               .ToList();

或者您可以使用不同的 GroupBy 重载:

List<List<string>> lstGroupedByKeys =
    dicClusters.GroupBy(pr => pr.Value, pr => pr.Key, (k, g) => g.ToList())
               .ToList();

使用基于语法的查询时可能会更清晰:

var lstGroupedByKeys = (from pr in dicClusters
                        group pr.Key by pr.Value into g
                        select g.ToList()).ToList();

https://stackoverflow.com/questions/32428602/

相关文章:

java - 覆盖哈希码方法时获取 "Stack overflow error "

php - 从另一台机器访问 wordpress 网站

html - 使用 ng-classes 样式输入占位符颜色样式

amazon-web-services - AWS : How do I programmatica

symfony - 如何使用 symfony 2 使工作软删除和唯一实体

date - 同步系统时间和日期的批处理文件

amazon-web-services - 在 AWS CLI DynamoDB 查询操作中替换变量

sed - 如何使用 sed 将多行追加到一个文件?

css - 选择器属性中的手写笔迭代

oracle - 12c 和 ORA-01792 : maximum number of colum