php和C#的yield迭代器实现方法对比分析
时间:2022-07-27
本文章向大家介绍php和C#的yield迭代器实现方法对比分析,主要内容包括其使用实例、应用技巧、基本知识点总结和需要注意事项,具有一定的参考价值,需要的朋友可以参考一下。
本文实例讲述了php和C#的yield迭代器实现方法对比。分享给大家供大家参考,具体如下:
yield关键字是用来方便实现迭代器的,免去了手工写迭代器的繁琐。迭代器常被用来实现协程,所以大部分的协程中都有yield关键字,可以参看unity3D的协程。
C#版本:
函数的返回类型必须为 IEnumerable、IEnumerable<T 、IEnumerator 或 IEnumerator<T 。
IEnumerable表示一个类可以迭代,也就是可以用foreach遍历,IEnumerator是真正的迭代器实现,IEnumerable和IEnumerator一个是使用迭代器的接口,一个是实现迭代器的接口。
C#是怎么用yield实现迭代器的呢?其实是编译器根据yield关键字生成了内部类,反编译一下就可以看到。
using System.Collections;
class Program
{
//返回IEnumerable接口,其实返回了编译器生成的内部类
public static IEnumerable fib(int n)
{
int cur = 1;
int prev = 0;
for (int i = 0; i < n; i++)
{
yield return cur;
int temp = cur;
cur = prev + cur;
prev = temp;
}
}
static void Main()
{
// Display powers of 2 up to the exponent 8:
foreach (int i in fib(9))
{
Console.Write("{0} ", i);
}
}
}
// prints: 1 1 2 3 5 8 13 21 34
php版本:
函数返回类Generator,而类Generator实现了迭代器接口Iterator。
<?php
//返回Iterator接口,php解释器帮我们返回了Generator类
function fib($n)
{
$cur = 1;
$prev = 0;
for ($i = 0; $i < $n; $i++) {
yield $cur;
$temp = $cur;
$cur = $prev + $cur;
$prev = $temp;
}
}
$fibs = fib(9);
foreach ($fibs as $fib) {
echo " " . $fib;
}
// prints: 1 1 2 3 5 8 13 21 34
- JavaScript 教程
- JavaScript 编辑工具
- JavaScript 与HTML
- JavaScript 与Java
- JavaScript 数据结构
- JavaScript 基本数据类型
- JavaScript 特殊数据类型
- JavaScript 运算符
- JavaScript typeof 运算符
- JavaScript 表达式
- JavaScript 类型转换
- JavaScript 基本语法
- JavaScript 注释
- Javascript 基本处理流程
- Javascript 选择结构
- Javascript if 语句
- Javascript if 语句的嵌套
- Javascript switch 语句
- Javascript 循环结构
- Javascript 循环结构实例
- Javascript 跳转语句
- Javascript 控制语句总结
- Javascript 函数介绍
- Javascript 函数的定义
- Javascript 函数调用
- Javascript 几种特殊的函数
- JavaScript 内置函数简介
- Javascript eval() 函数
- Javascript isFinite() 函数
- Javascript isNaN() 函数
- parseInt() 与 parseFloat()
- escape() 与 unescape()
- Javascript 字符串介绍
- Javascript length属性
- javascript 字符串函数
- Javascript 日期对象简介
- Javascript 日期对象用途
- Date 对象属性和方法
- Javascript 数组是什么
- Javascript 创建数组
- Javascript 数组赋值与取值
- Javascript 数组属性和方法
- webpack3 升级到 webpack4 小记
- BigData-Apache HBase数据库
- Tungsten Fabric知识库丨这里有18个TF补丁程序,建议收藏
- BigData-消息队列框架Apache Kafka入门、原理解析
- BigData--Apache Flume框架
- 【项目实战】DWS 层创建&数据接入
- BigData--Hive数据仓库工具
- 读书笔记——《深入浅出 Webpack》( 送 XMind导图和电子书)
- BigData--MapReduce进阶(二)之工作机制
- BigData--MapReduce进阶(一)之框架原理
- BigData--MapReduce入门
- BigData--分布式流数据流引擎Apache Flink
- 【项目实战】ADS 层数据导出
- 前端大杂货铺系列《七》
- BigData--大数据技术之Spark机器学习库MLLib