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();
            }
        }
    }
    
  • 相关阅读:
    Linux中无法使用ifconfig命令
    Linux中运行程序的一些方法介绍
    python中一些函数的使用介绍
    pytorch中DataSet和DataLoader的使用详解
    gensim中有关word2vec的一些使用
    pytorch中比较两个tensor是否相等
    pytorch中的数据类型之间的转换
    pytorch中有关gpu的操作
    pytorch中保存模型
    Vscode配合远程服务器进行python项目开发
  • 原文地址:https://www.cnblogs.com/Hollson/p/9792463.html
Copyright © 2011-2022 走看看