当前位置: 移动技术网 > IT编程>开发语言>.net > List分组迭代器

List分组迭代器

2018年10月16日  | 移动技术网IT编程  | 我要评论

杨紫身材有料,方腊,政法委书记退出常委

说明:

针对长度较大的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>
        /// 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();
        }
    }
}

如对本文有疑问,请在下面进行留言讨论,广大热心网友会与你互动!! 点击进行留言回复

相关文章:

验证码:
移动技术网