C# 集合分组,将一个集合分若干组
static void Main(string[] args) { List<int> vs = new List<int>(); for (int i = 0; i < 101; i++) { vs.Add(i); } //分成3组 SpliteSourceByCount(vs, 3); //根据页面大小分组 20 SpliteSourceBySize(vs,20); }
/// <summary> /// 将集合若干组 /// </summary> /// <param name="source">数据集</param> /// <param name="pageSiez">每一组大小</param> private static List<List<int>> SpliteSourceBySize(List<int> source, int pageSiez) { int listCount = (source.Count() - 1) / pageSiez + 1; // 计算组数 List<List<int>> pages = new List<List<int>>(); for (int pageIndex = 1; pageIndex <= listCount; pageIndex++) { var page = source.Skip((pageIndex - 1) * pageSiez).Take(pageSiez).ToList(); pages.Add(page); } return pages; } /// <summary> /// 将集合若干组 /// /// </summary> /// /// <param name="source">数据集</param> /// /// <param name="count">组数</param> private static List<List<int>> SpliteSourceByCount(List<int> source, int count) { int pageSiez = source.Count() / count;//取每一页大小 int remainder = source.Count() % count;//取余数 List<List<int>> pages = new List<List<int>>(); for (int pageIndex = 1; pageIndex <= count; pageIndex++) { if (pageIndex != count) { var page = source.Skip((pageIndex - 1) * pageSiez).Take(pageSiez).ToList(); pages.Add(page); } else { var page = source.Skip((pageIndex - 1) * pageSiez).Take(pageSiez + remainder).ToList(); pages.Add(page); } } return pages; }