zoukankan      html  css  js  c++  java
  • 迭代集合的不同方式(yield return)

    在下面这个比HelloWord略大但比较真实的示例中,可以使用yield return语句,以不同方式迭代集合的类。类BookTitles可以默认方式通过GetEnumerator()方法迭代标题,用Reverse()方法逆序迭代标题,用Subset()方法迭代子集。

        public class BookTitles {
                string[ ] names = {"A","B","C","D"};
                /// <summary>
                /// 迭代标题
                /// </summary>
                /// <returns></returns>
                public IEnumerator<string> GetEnumerator ( ) {
                    for ( int i = 0; i < 4; i++ ) {
                        yield return names[i];
                    }
                }
                /// <summary>
                /// 逆序迭代标题
                /// </summary>
                /// <returns></returns>
                public IEnumerable<string> Reverse ( ) {
                    for ( int i =3; i >= 0; i-- ) {
                        yield return names[i];
                    }
                }
                /// <summary>
                /// 迭代子集
                /// </summary>
                /// <param name="index"></param>
                /// <param name="length"></param>
                /// <returns></returns>
                public IEnumerable<string> Subset ( int index, int length ) {
                    for ( int i = index ; i < index +length ; i++ ) {
                        yield return names[i];
                    }
                }
            }

    注:类支持的默认迭代是定义为返回IEnumerator的GetEnumerator()方法,命名的迭代返回IEnumerable。

    迭代字符串数组的客户端代码先使用GetEnumerator()方法,该方法不必在代码中编写,因为这是默认使用的方法。然后逆序迭代标题,最后将索引和要迭代的项数传给Subset()方法,来迭代子集。

               var titles = new BookTitles ( );
                foreach ( var item in titles  ) {
                    Console.Write ( item+"   " );
                }
    
                Console.WriteLine ( "\n Reverse");
                foreach ( var item in titles.Reverse() ) {
                    Console.Write ( item+"   "  );
                }
                Console.WriteLine ("\n Subset" );
                foreach ( var item in titles.Subset(2,2)  ) {
                    Console.Write(item +"   " );
                }
                Console.ReadKey ( );
  • 相关阅读:
    ERP类系统设计学习
    人工智能关键词
    系统性能
    连接不同服务器不同数据库
    socket一个例子
    SQLite
    asp.net 页面缓存、数据缓存
    原生js
    Android 网络调试 adb tcpip 开启方法
    C语言中string char int类型转换
  • 原文地址:https://www.cnblogs.com/xiaoyu5062/p/2580549.html
Copyright © 2011-2022 走看看