我有一个类似的父列表: -
ParentList = {a,b,c,a,c,d,b,a,c,c}
我想将此列表拆分为较小的列表,例如: -
ListA = {a,a,a} ListB = {b,b} ListC= {c,c,c,c} ListD = {d}
我的主要目的是获得最高值的计数。在上面的情况中,它是4
,它是ListC
的计数。
如何将父列表拆分为小列表,如示例中所述。或者有没有一种方法可以在没有列表拆分的情况下获得最大的计数。
感谢任何帮助。
答案 0 :(得分:2)
使用GroupBy
对相似值进行分组,然后计算每个组中的项目数量:
var result = ParentList.GroupBy(item => item)
.Select(group => new {
Key = group.Key,
Count = group.Count() })
.OrderByDescending(item => item.Count);
您还可以使用查询语法:
var result = from item in ParentList
group 1 by item into g
order by g.Count() descending
select new { Key = g.Key, Count = g.Count() };
如果您真的希望不同的集合具有不同的变量,如上面的描述那么您需要从片段中检索每个集合。您还可以对分组结果使用ToDictionary
。
答案 1 :(得分:0)
string maxRepeated = ParentList.GroupBy(s => s)
.OrderByDescending(s => s.Count())
.First().Key;
答案 2 :(得分:0)
执行此操作的简单方法是使用LINQ
var chars = new[] { 'a', 'b', 'c', 'a', 'c', 'd', 'b', 'a', 'c', 'c' };
var largetstGroup = chars
.GroupBy(_ => _) // Group items by the letter this will yield groups (aka lists) that will conatin only each letter
.OrderByDescending(_ => _.Count()) //Order by the items in each list
.FirstOrDefault(); // get the first one
如果您的列表中有更复杂的对象,使用GroupBy方法,您可以指定任何属性来执行分组(例如,对于您可以按年龄GroupBy(_=> _.Age)
分组的人员列表
答案 3 :(得分:0)
假设你只想要计数,而不是那个字符/字符串给出的数,那么这是一个单行(你需要using System.Linq;
)
var highestCount = ParentList.GroupBy(p => p).Max(p => p.Count());