List分组迭代器
说明:
针对长度较大的List对象,可以分组批量进行处理, 如:长度为1000的List对象,可分为10组,每组100条,对数据进行业务逻辑处理...
Source
/******************************************************************************
* 名称:List分组迭代器
* 说明:针对长度较大的List对象,可以分组批量进行处理
* 如:长度为1000的List<int>对象,可分为10组,每组100条,对数据进行业务逻辑处理
* 作者:Sybs
* 时间:2018-10-15
* **************************************************************************/
namespace System.Collections.Generic
{
/// <summary>
/// List分组迭代器
/// </summary>
public class ListGroupIterator<T>
{
private int _groupsize = 1;
/// <summary>
/// 分组大小(缺省值为1)
/// </summary>
public int GroupSize
{
get => _groupsize;
set => _groupsize = value < 1 ? 1 : value;
}
/// <summary>
/// 分组数量
/// </summary>
public int GroupCount { get => (Source.Count + GroupSize - 1) / GroupSize; }
/// <summary>
/// List数据源
/// </summary>
public List<T> Source { get; set; }
public ListGroupIterator() { }
public ListGroupIterator(int groupSize) : this(groupSize, null) { }
public ListGroupIterator(List<T> list) : this(1, list) { }
public ListGroupIterator(int groupSize, List<T> list)
{
this.GroupSize = groupSize;
this.Source = list;
}
/// <summary>
/// ListGroupIterator迭代器
/// </summary>
/// <returns></returns>
public IEnumerator<List<T>> GetEnumerator()
{
if (Source?.Count > 0)
{
var ps = Convert.ToInt32(Math.Ceiling(Source.Count * 1.0d / GroupSize));
var model = Source.Count % GroupSize;
for (int i = 0; i < ps; i++)
{
var len = ps - i == 1 && model > 0 ? model : GroupSize;
yield return Source.GetRange(GroupSize * i, len);
}
}
}
/// <summary>
/// 将List<T>实例赋值给ListGroupIterator对象
/// </summary>
/// <param name="list"></param>
public static implicit operator ListGroupIterator<T>(List<T> list)
{
return new ListGroupIterator<T> { Source = list };
}
}
}
调用
using System;
using System.Collections.Generic;
namespace Demo
{
class Program
{
static void Main()
{
ListGroupIterator<int> lg1 = new List<int>() { 1, 2, 3, 4, 5 };
ListGroupIterator<int> lg2 = new ListGroupIterator<int>(new List<int> { 1, 2, 3, 4, 5 });
ListGroupIterator<int> lg3 = new ListGroupIterator<int>(3, new List<int>() { 1, 2, 3, 4, 5 });
lg3.Source.AddRange(new List<int>() { 6, 7, 8, 9 });
lg3.GroupSize = 2;
foreach (var item in lg3) { Console.WriteLine(string.Join(",", item)); }
Console.ReadLine();
}
}
}
List分组迭代器的更多相关文章
- List分组迭代器 C#--深入理解类型
List分组迭代器 说明: 针对长度较大的List对象,可以分组批量进行处理, 如:长度为1000的List对象,可分为10组,每组100条,对数据进行业务逻辑处理... Source /**** ...
- Java Style的C++容器流式处理类
很久没有上博客园了,最近一段时间,因为工作的关系时间上比较闲,利用闲暇时间重新翻了一下丢弃很久的C++语言.C++从98.11.14.17目前已经也走到了20版本,发生了很多变化,也引入了很多新的语言 ...
- Python(四)装饰器、迭代器&生成器、re正则表达式、字符串格式化
本章内容: 装饰器 迭代器 & 生成器 re 正则表达式 字符串格式化 装饰器 装饰器是一个很著名的设计模式,经常被用于有切面需求的场景,较为经典的有插入日志.性能测试.事务处理等.装饰器是解 ...
- Hadoop Mapreduce分区、分组、二次排序过程详解[转]
原文地址:Hadoop Mapreduce分区.分组.二次排序过程详解[转]作者: 徐海蛟 教学用途 1.MapReduce中数据流动 (1)最简单的过程: map - reduce (2) ...
- 5.python(迭代器,装饰器,生成器,基本算法,正则)
一,迭代器 1.迭代器 (1)迭代器是访问集合元素的一种方式.迭代器对象从集合的第一个元素开始访问,知道所有的元素被访问完结束.迭代器只能往前不会后退. (2)对于原生支持随机访问的数据结构(如t ...
- 【Java】List集合按数量分组
有时候,我们需要将大的集合按指定的数量分割成若干个小集合.(比如:集合作为SQL中IN的参数,而SQL又有长度限制,所以需要分批分几次进行查询) 虽然此需求感觉不常见,但偶也写过几次类似的方法,故记录 ...
- Python标准库:迭代器Itertools
Infinite Iterators: Iterator Arguments Results Example count() start, [step] start, start+step, star ...
- Python学习笔记 (4) :迭代器、生成器、装饰器、递归、正则表达式等
迭代器 迭代器是访问集合元素的一种方式.迭代器对象从集合的第一个元素开始访问,直到所有的元素被访问完结束.迭代器只能往前不会后退,不过这也没什么,因为人们很少在迭代途中往后退.另外,迭代器的一大优点是 ...
- Python学习之路——迭代器、生成器、算法基础、正则
一.迭代器: 迭代器是访问集合元素的一种方式. 迭代器对象是从集合的第一个元素开始访问,直到所有的元素被访问完结束. 迭代器只能往前不会后退,不过这也没什么,因为人们很少在迭代途中往后退. 另外,迭代 ...
随机推荐
- Junit Test 的时候出错java.lang.IllegalStateException: Failed to load ApplicationContext
问题原因 JDK1.8 spring版本3.2.0RELEASE JDK和spring版本不兼容 解决方法 1.降低JDK版本到1.7 2.将spring的版本升级到4.0.0RELEASE或者 ...
- WCF配置Tcp协议
注意点: 1,<serviceMetadata httpGetEnabled="false"/> 2, <services> ...
- 利用fetch进行POST传参
fetch(config.host+"url",{ method:"POST", mode: 'cors',跨域请求 headers: { ...
- CocoaPods私有库!!!!!!!!!!!(装逼特技)
1http://www.jianshu.com/p/4b63dfbd8be7 2 修改工程下的.podspec文件,如 注意1: 验证库是否正确: pod lib lint --verbose -- ...
- C#中不同格式数据校验的正则表达式
网上经常看到用正则表达式校验数据的文章,有的虽然总结得很全,但是大多数都没有经过严格验证,错误较多. 本文包含三十余条不同格式数据校验的C#正则表达式,一般均附有说明,且在Visual Studio里 ...
- oracle运行的服务介绍
oracle正常运行的话,所需要启动的服务是这几个: Oracle ORCL VSS Writer Service,OracleDBConsoleorcl,OracleJobSchedulerORCL ...
- 2018年最新 Java面试通关要点汇总集
基础篇 基本功 面向对象的特征 final, finally, finalize 的区别 int 和 Integer 有什么区别 重载和重写的区别 抽象类和接口有什么区别 说说反射的用途及实现 说说自 ...
- python实现高效率的排列组合算法-乾颐堂
组合算法 本程序的思路是开一个数组,其下标表示1到m个数,数组元素的值为1表示其下标 代表的数被选中,为0则没选中. 首先初始化,将数组前n个元素置1,表示第一个组合为前n个数. 然后从左到右扫描数组 ...
- Django中的元类-乾颐堂
看Django(1.6)的Form相关源代码时比较迷惑,于是节选了django.forms.forms.py中的几个代码片段来分析Django中是怎么使用元类的: 1 2 3 4 5 6 7 8 9 ...
- elmah oracle
. <sectionGroup name="elmah"> <section name="security" requirePermissio ...