zoukankan      html  css  js  c++  java
  • 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();
            }
        }
    }
    
  • 相关阅读:
    如何降低微服务测试成本?我的经验之谈
    Serverless 在 SaaS 领域的最佳实践
    技术干货 | “选图预览并上传”的场景如何解?全网最全方案汇总来了
    SRE技术保障平台-盯屏中心TAC: 混合云一站式告警运维平台
    DTCC 2020 | 阿里云王涛:阿里巴巴电商数据库上云实践
    中值滤波算法 C
    python logger.debug_python中的logger模块讲解
    唯一值
    接触jeecgBoot低代码开发
    php数字操作
  • 原文地址:https://www.cnblogs.com/Hollson/p/9792463.html
Copyright © 2011-2022 走看看