假设我有一个数字列表,可以是任意数量,实际上超过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/