如何在List <List <String >>中对类似列表进行分组和计数

Ahm*_*mad 0 c# list count

我有一个字符串列表列表:

 List<List<String>> pChain;
Run Code Online (Sandbox Code Playgroud)

它可能有重复的字符串列表(如果它们在相同的顺序中具有相同的字符串,则两个字符串列表相等).我想在主列表中列出每个不同列表的计数.我试过了:

var results = (from t in pChain

               group t by new { t }
                   into g
                   select new
                   {
                       g.Key,
                       Count = g.Count(),
                   }).OrderByDescending(x => x.Count).ToList();

foreach (var v in results)
{
    ListViewItem lv = listView2.Items.Add(v.Key.ToString());

    lv.SubItems.Add(v.Count + "");
}
Run Code Online (Sandbox Code Playgroud)

但它没有将类似的字符串列表分组到一个列表中,也不计算它们.

Tim*_*ter 6

你可以使用SelectMany+ Distinct:

var allDistinctItems = pChain.SelectMany(list => list).Distinct();
Run Code Online (Sandbox Code Playgroud)

如果你想要计数使用int countOfDistinctItems = allDistinctItems.Count();.

如果你想要一本字典,你可以使用:

Dictionary<string, int> itemCounts = pChain.SelectMany(list => list)
    .GroupBy(item => item)
    .ToDictionary(g => g.Key, g => g.Count());
Run Code Online (Sandbox Code Playgroud)