假设我有一个数字列表,可以是任意数量,实际上超过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来划分我自己的函数。
发布于 2015-10-20 17:21:29
因为您已经对列表进行了排序,所以可以使用一些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评论的那样,您可能希望从方法中返回一个列表(List<List<int>>),而不是只返回List<int>。
return new List<List<int>> { smallGroup, middleGroup, largeGroup };发布于 2015-10-20 17:34:55
这将是一种简单的方法:
var result = list.GroupBy (x =>
{
if(x <= small) return 1;
if(x <= medium) return 2;
return 3;
});或者:
var result = list.GroupBy (x => x <= small ? 1 : x <= medium ? 2 : 3);(这不需要对列表进行排序)
https://stackoverflow.com/questions/33242747
复制相似问题