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

Mon*_*RPG 0 c# linq dictionary group-by

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

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

dicClusters.Add("A",1);
dicClusters.Add("B",1);
dicClusters.Add("C",2);
dicClusters.Add("D",3);
Run Code Online (Sandbox Code Playgroud)

所以我想从下面编写如下列表

  List<List<string>> lstGroupedByKeys=dicClusters.GroupBy(pr => pr.Value)...
Run Code Online (Sandbox Code Playgroud)

结果将是

first list {"A","B"}
second list {"C"}
third list {"D"}
Run Code Online (Sandbox Code Playgroud)

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

c#.NET 4.5.2

Mar*_*zek 5

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

List<List<string>> lstGroupedByKeys =
    dicClusters.GroupBy(pr => pr.Value)
               .Select(g => g.Select(pr => pr.Key).ToList())
               .ToList();
Run Code Online (Sandbox Code Playgroud)

或者你可以使用不同的GroupBy过载:

List<List<string>> lstGroupedByKeys =
    dicClusters.GroupBy(pr => pr.Value, pr => pr.Key, (k, g) => g.ToList())
               .ToList();
Run Code Online (Sandbox Code Playgroud)

使用基于语法的查询时可能更干净:

var lstGroupedByKeys = (from pr in dicClusters
                        group pr.Key by pr.Value into g
                        select g.ToList()).ToList();
Run Code Online (Sandbox Code Playgroud)