欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页  >  IT编程

.NET基础之迭代器

程序员文章站 2024-01-13 17:48:28
使用foreach循环是有ienumerator接口来实现的,ienumerator即实现了迭代器,在foreach中如何迭代一个集合arraylist呢?   调用...
使用foreach循环是有ienumerator接口来实现的,ienumerator即实现了迭代器,在foreach中如何迭代一个集合arraylist呢?

 

调用arraylis.getenumberator(),返回一个ienumberator引用。

调用所返回的enumberator接口的movenext()方法。

如果movenext()返回true,就使用ienumberator接口的current属性获取对象的一个引用,用于foreach循环。

重复前面两步,知道movenext方法返回false为止,此时循环停止。

迭代器的实现例子:

 

复制代码

class program

    {

        

        public static void main(string[] args)

        {

            foreach (string str in simplelist())

            {

                console.writeline(str);

            }

            console.readkey();

        }

        public static ienumerable simplelist()

        {

            yield return "1";

            yield return "2";

            yield return "3";

        }

    }

复制代码

这样我们就实现了一个最简单的迭代器。结果为:qq截图20141114211249

 

 

下面给个复杂一点的例子,用迭代器实现返回素数:

 

复制代码

public static void main(string[] args)

        {

            primes primesfrom2to1000 = new primes(2, 1000);

            foreach (long i in primesfrom2to1000)

            {

                console.write("{0}", i);

            }

        }

复制代码

复制代码

public class primes 

    {

        private long min;

        private long max;

 

        public primes()

            : this(2, 200)

        { }

        public primes(long minimum, long maximum)

        {

            if (minimum < 2)

            {

                min = 2;

            }

            else

            {

                min = minimum;

            }

            max = maximum;

        }

        public system.collections.ienumerator getenumerator()//返回类型为一个迭代器

        {

            for (long possibleprime = min; possibleprime <= max; possibleprime++)

            {

                bool isprime = true;

                for (long possiblefactor = 2; possiblefactor <= (long)math.floor(math.sqrt(possibleprime)); possiblefactor++)

                {

                    long remainderafterdivsion = possibleprime % possiblefactor;

                    if (remainderafterdivsion == 0)

                    {

                        isprime = false;

                        break;

                    }

                }

                if (isprime)

                {

                    yield return possibleprime;//为素数,返回之

                }

            }

        }

    }

复制代码

结果为:

 

qq截图20141114212209

 

 

 

迭代器返回的类型有两种:ienumberable和ienumerator。

 

如果要迭代一个类,可使用getenumerator(),它的返回类型是ienumerator。

如果要迭代一个类成员,例如一个方法,则使用ienumerable。