C#——迭代器

简介: C#——迭代器

迭代器(iterator)有时又称光标(cursor),它是程序设计的软件设计模式。

迭代器模式提供一个方法顺序访问一个聚合对象中的各个元素,而又不暴露其内部的标识。在表现效果上看是可以在容器对象(例如链表或数组)上遍历访问的接口,设计人员无需关心容器对象的内存分配的实现细节。可以用foreach遍历的类,都是实现了迭代器。

简单来说,迭代器模式使得你能够获取到序列中的所有元素而不用关心是其类型是array,list,linked list或者是其他什么序列结构。这一点使得能够非常高效的构建数据处理通道(data pipeline)--即数据能够进入处理通道,进行一系列的变换,或者过滤,然后得到结果。事实上,这正是LINQ的核心模式。

举个例子,使用迭代器写个和foreach类似的功能来遍历一个字符串,输出它每个字符:

        static void Main()
        {
            string str = "ABCDEFG";
            foreachFunc(str);
            foreach (char a in str)
            {
                Console.WriteLine("官方foreach里的循环是:" + a);
            }
        }
        static void foreachFunc(string str)
        {
            IEnumerator e = str.GetEnumerator();
            while (e.MoveNext())
            {
                Console.WriteLine("民间foreach里的循环是:" + e.Current);
            }
        }

效果是:

869d61aaf8674bdaaa9a1401376a481a_tplv-k3u1fbpfcp-zoom-in-crop-mark_4536_0_0_0.webp.jpg

foreach的本质是先获取in后面这个对象的IEnumerator(会调用对象其中的GetEnumerator方法来获取),然后执行得到这个IEnumerator对象中的MoveNext方法。其实只要MoveNext方法的返回值时true就会去得到current,然后复制给item。

举个例子:

    forreach (int item in list)
    {
        Console.writeLine(item);
    }

yield return是c#提供给我们的语法糖。

所谓语法糖,也称糖衣语法。其主要作用就是将复杂逻辑简单化,可以增加程序的可读性,从而减少程序代码出错的机会。

关键接口:IEnumerable

命名空间:using System.collections;

让想要通过foreach遍历的自定义类实现接口中的方法GetEnumerator即可

举个例子:

class CustomList2 : IEnumerable
{
    private int[] list;
    public CustomList2()
    {
        list = new int[] { 1,2,3,4,5,6,7,8};
    }
    public IEnumerator GetEnumerator()
    {
        throw new NotImplementedException();
    }
}


目录
相关文章
|
10天前
|
开发者
迭代器(Iterator)遍历的两种方法(for和while)
迭代器(Iterator)遍历的两种方法(for和while)
|
3月前
|
C++ 容器
C++:迭代器
C++:迭代器
29 0
|
3月前
|
算法 C++ 容器
c++迭代器介绍
C++中的迭代器是一种抽象的数据访问对象,它允许对容器中的元素进行遍历,而不必暴露底层数据结构的细节。迭代器提供了一种通用的方法来访问容器中的元素,无论容器的类型是什么。C++标准库中的许多容器(如vector、list、map等)都支持迭代器。
39 0
|
4月前
自己实现iterator迭代器
自己实现iterator迭代器
|
6月前
|
设计模式 Java Python
迭代器(Iterator)
迭代器(Iterator)是一种设计模式,用于遍历聚合对象的一种方法。迭代器提供了一种方法来访问聚合对象中的元素,而不需要暴露该对象的内部表示。迭代器模式在 Java 和 Python 等编程语言中广泛使用,可以用于处理列表、元组、集合等数据结构。
36 1
|
算法 搜索推荐 C++
C++迭代器 iterator详解
C++迭代器 iterator详解
280 0
C++迭代器 iterator详解
|
索引 容器
集合之迭代器
集合之迭代器
206 0
集合之迭代器
|
存储 Java 容器
Iterator迭代器介绍!
Iterator迭代器介绍!
121 0
Iterator迭代器介绍!
|
Sentinel Serverless 索引
迭代器
迭代器是一个可以记住遍历的位置的对象。 迭代器对象从集合的第一个元素开始访问,直到所有的元素被访问完结束。迭代器只能往前不会后退。 一、NEXT 语法:next(iterator[, default]) 说明: 1、函数必须接收一个可迭代对象参数,每次调用的时候,返回可迭代对象的下一个元素。
1092 0