c# - List <int>分成三份

标签 c# linq list

假设我有一个数字列表,可以是任意数量,实际上超过15。

我想将数字列表分为三类,具体取决于它们的大小(例如,小,中和大)。

实现此目标的最佳方法是什么?

我已经写了下面的内容,是否有必要按照下面的方法创建自己的功能,或者我可以在.NET中使用任何现有功能?

  public static List<int> OrderByThree (List<int> list)
            {
                list.Sort();
                int n = list.Count();
                int small = n / 3;
                int medium = (2 * n) / 3;
                int large = n;
    // depending if the number is lower/higher than s/m/l,
 // chuck into group via series of if statements

                return list;
            }



假设我有一个数字列表,例如1-15,我希望小数字1-5,中号6-10,大号11-15。但是我一开始不知道数字的数量,也没有戏剧性,我希望使用list.count来划分自己的功能。

最佳答案

由于您已经对列表进行了排序,因此可以使用一些LINQ来获取结果。我在这里假设一个右闭间隔。

list.Sort();
int n = list.Count();
var smallGroup = list.TakeWhile(x => (x <= n / 3)).ToList();
var middleGroup = list.Skip(smallGroup.Count).TakeWhile(x => (x <= (2 * n) / 3)).ToList();
var largeGroup = list.Skip(smallGroup.Count + middleGroup.Count).ToList();


编辑
正如Steve Padmore所评论的那样,您可能希望从您的方法中返回列表列表(List<List<int>>),而不仅仅是返回List<int>

return new List<List<int>> { smallGroup, middleGroup, largeGroup };

关于c# - List <int>分成三份,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33242747/

相关文章:

c# - 从类、代码生成 XSD

Web 服务的 C# Web API 路由

c# - 子执行命令后调用方法

java - 迭代作为表对象的列表

java - removeAll() 方法花费很长时间

c# - 在 Autofac 的 lambda 注册期间访问上下文信息?

c# - 使用 LINQ 从 2 个列表中返回列表

c# - 仅使用 LINQ 对包含数字属性的对象集合求和

c# - 使用 Linq to XML 递归删除 xml 节点

arrays - Python 数组附加向量,然后按位置(而不是按元素)对数组的元素求和