C#迭代器

一、自定义迭代器

class Iterator
    {
        private int[] Nums;
        public Iterator(int[] nums)
        {
            Nums = nums;
        }

        public int index = -1;
        public bool MoveNext()
        {
            index++;
            return index < Nums.Length;
        }

        public int Current
        {
            get
            {
                return Nums[index];
            }
        }
    }


    class MyList3 : IEnumerable
    {
        private int[] nums { set; get; }
        public MyList3(int n)
        {
            //构造函数
            nums = new int[n];
            //创建随机数对象
            var random = new Random();
            for (int i = 0; i < n; i++)
            {
                //1-10之间的随机数
                nums[i] = random.Next(1, 10);
            }
        }

        //每次调用创建一个新的迭代器
        public Iterator GetIterator()
        {
            return new Iterator(nums);
        }

        public IEnumerator GetEnumerator()
        {
            //throw new NotImplementedException();
            foreach (var i in nums)
            {
                yield return i;
            }
        }
    }
    class lteratorDemo
    {


            MyList3 list = new MyList3(5);

            var l1 = list.GetIterator();
            
            while (l1.MoveNext())
            {
                Console.WriteLine(l1.Current);
                var l2 = list.GetIterator();
                while (l2.MoveNext())
                    Console.WriteLine("\t"+l2.Current);
            }        
    }

二、实现IEnumerable迭代器

  • 实现IEnumerable接口,实现里面的迭代方法

  • 自定义迭代器类

class Iterator
    {
        private int[] Nums;
        public Iterator(int[] nums)
        {
            Nums = nums;
        }

        public int index = -1;
        public bool MoveNext()
        {
            index++;
            return index < Nums.Length;
        }

        public int Current
        {
            get
            {
                return Nums[index];
            }
        }
    }
  • 实现IEnumerable接口
class MyList12 : IEnumerable
    {
        private int[] nums { set; get; }
        public MyList12(int n)
        {
            //构造函数
            nums = new int[n];
            //创建随机数对象
            var random = new Random();
            for (int i = 0; i < n; i++)
            {
                //1-10之间的随机数
                nums[i] = random.Next(1, 10);
            }
        }

        //每次调用创建一个新的迭代器
        public Iterator GetIterator()
        {
            return new Iterator(nums);
        }

        public IEnumerator GetEnumerator()
        {
            //throw new NotImplementedException();
            foreach (var i in nums)
            {
                yield return i;
            }
        }
    }

yield return 顺序返回 yieId break

三、常用集合

链表结构:var list = new List();

//初始化集合参数
var list = new List<int>()
            {
                1,5,7,10
            };

哈希表结构: Dictionary<key,value> === (Java)Map<key,value>

var map = new Dictionary<string, object>();
          map.Add("zhangsan",11);
          map.Add("李四","12");
			//使用key来获取value
            Console.WriteLine(map["zhangsan"]);
            //map获取迭代器然后遍历
           var m =  map.GetEnumerator();
            while (m.MoveNext())
            {
                Console.WriteLine(m.Current);
            }

IComparable可以用来比较两个数值是否一致

发布了16 篇原创文章 · 获赞 3 · 访问量 308

猜你喜欢

转载自blog.csdn.net/weixin_41963220/article/details/103310253
今日推荐