我有一个字符串列表列表:
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)
但它没有将类似的字符串列表分组到一个列表中,也不计算它们.
你可以使用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)