List分组迭代器
程序员文章站
2022-07-02 15:20:00
说明: 针对长度较大的List对象,可以分组批量进行处理, 如:长度为1000的List对象,可分为10组,每组100条,对数据进行业务逻辑处理... Source 调用 ......
说明:
针对长度较大的list对象,可以分组批量进行处理, 如:长度为1000的list
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> /// 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(); } } }
推荐阅读
-
搞清楚 Python 的迭代器、可迭代对象、生成器
-
PHP设计模式之迭代器(Iterator)模式入门与应用详解
-
java设计模式--迭代器模式
-
【Python实践-5】使用迭代查找一个list中最小和最大值
-
Python3 迭代器,生成器,装饰器
-
JavaScript迭代器的含义及用法
-
解决大于5.7版本mysql的分组报错Expression #1 of SELECT list is not in GROUP BY clause and contains nonaggregated
-
【共读Primer】17.<3.4> 迭代器 Page95
-
java迭代器和for循环优劣详解
-
java迭代器基础知识点总结