将列表拆分为多个具有相似值的列表C#

时间:2017-08-28 06:16:03

标签: c# arrays list count

我有一个类似的父列表: -

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的计数。

如何将父列表拆分为小列表,如示例中所述。或者有没有一种方法可以在没有列表拆分的情况下获得最大的计数。

感谢任何帮助。

4 个答案:

答案 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());