首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >List<int>分成3/3

List<int>分成3/3
EN

Stack Overflow用户
提问于 2015-10-20 17:12:00
回答 2查看 119关注 0票数 1

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

我想将这个数字列表分成三组,例如,大小、大小和大小。

实现这一目标的最佳途径是什么?

我已经写出了下面的内容,是否有必要按照下面的内容创建我自己的函数,或者我是否可以在.NET中使用它呢?

代码语言:javascript
复制
  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来划分我自己的函数。

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2015-10-20 17:21:29

因为您已经对列表进行了排序,所以可以使用一些LINQ来获得结果。我假设这里有一个右闭区间。

代码语言:javascript
复制
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评论的那样,您可能希望从方法中返回一个列表(List<List<int>>),而不是只返回List<int>

代码语言:javascript
复制
return new List<List<int>> { smallGroup, middleGroup, largeGroup };
票数 6
EN

Stack Overflow用户

发布于 2015-10-20 17:34:55

这将是一种简单的方法:

代码语言:javascript
复制
var result = list.GroupBy (x => 
{
    if(x <= small) return 1;
    if(x <= medium) return 2;
    return 3;
});

或者:

代码语言:javascript
复制
var result = list.GroupBy (x => x <= small ? 1 : x <= medium ? 2 : 3);

(这不需要对列表进行排序)

票数 3
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/33242747

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档