zoukankan      html  css  js  c++  java
  • C#2.0学习笔记迭代器

    1.why Iterators
    C#中的foreach语句用于迭代一个可枚举集合的元素.为了实现可枚举,这个集合元素必须实现无参的GetEnumerator 方法,该方法返回一个enumerator,通常情况下enumerator实现起来是比较困难的,用Iterators让这个任务变得非常简单.
    2.How Iterators
    一个iterator 是yields一个有序值序列的语句块.一个iterator 不同于其他语句块的地方在于它有一个或多个yield语句
    a. yield return 语句用于产生迭代的下一个值
    b.yield break语句表示迭代完成.
    一个iterator 可以用做一个函数的函数体,只要这个函数的返回值类型是enumerator interfaces 或者enumerable interfaces.
    a.enumerator interfaces 是System.Collections.IEnumerator 或者是范型System.Collections.Generic.IEnumerator<T>的构造类型.
    b.enumerable interfaces是System.Collections.IEnumerable 或者是范型System.Collections.Generic.IEnumerable<T>的构造类型.
    理解一下一点是非常重要的:iterator 不是一个成员而是实现函数成员的手段.一个通过iterator 实现的方法,可以被其他成员overridden或者overloaded(这不知道这两个单词怎么翻译了,很多翻译都把这两个单词处理为重载,这是不太欠当的,因为两者不是一回事,直接用E文好了),那些成员可以用iterator 实现也可以不用iterator 实现.
    下面的例子是Stack<T>用iterator实现它的Enumerator.iterator从栈顶到栈底枚举栈中的元素
    using System.Collections.Generic;

    public class Stack<T>: IEnumerable<T>

    {

        T[] items;

        
    int count;

        
    public void Push(T data) {}

        
    public T Pop() {}

        
    public IEnumerator<T> GetEnumerator() {

            
    for (int i = count – 1; i >= 0--i) {

               yield 
    return items[i];

            }


        }


    }

    方法GetEnumerator是Stack<T>变成一个可以枚举的类型.下面的例子展现了如何用foreach来列举栈中的成员.
    using System;

    class Test

    {

        
    static void Main() {

            Stack
    <int> stack = new Stack<int>();

            
    for (int i = 0; i < 10; i++) stack.Push(i);

            
    foreach (int i in stack) Console.Write("{0} ", i);

            Console.WriteLine();

        }


    }


  • 相关阅读:
    洛谷——P2054 [AHOI2005]洗牌(扩展欧几里得,逆元)
    线性筛法(伪模板及。。。)
    洛谷——P3919 【模板】可持久化数组(可持久化线段树/平衡树)
    CF450B Jzzhu and Sequences(矩阵加速)
    洛谷——P1349 广义斐波那契数列(矩阵加速)
    P1269 信号放大器
    istio prometheus预警Prometheus AlertManager
    istio promethus收集不到数据
    KubeletNotReady runtime network not ready: NetworkReady=false reason:NetworkPluginNotReady message:docker: network plugin is not ready: cni config uninitialized
    centos7虚拟机设置静态ip
  • 原文地址:https://www.cnblogs.com/Farseer1215/p/285480.html
Copyright © 2011-2022 走看看