国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁 > 語言 > PHP > 正文

php和C#的yield迭代器實現方法對比分析

2024-05-05 00:10:21
字體:
來源:轉載
供稿:網友

本文實例講述了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

希望本文所述對大家PHP程序設計有所幫助。


注:相關教程知識閱讀請移步到PHP教程頻道。
發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表

圖片精選

主站蜘蛛池模板: 新干县| 从江县| 巴塘县| 镇平县| 镇康县| 株洲县| 台北市| 永和县| 凭祥市| 昌都县| 秦皇岛市| 都江堰市| 武功县| 始兴县| 常熟市| 建湖县| 名山县| 长海县| 梅州市| 开阳县| 祁连县| 上饶县| 尉犁县| 徐汇区| 黎川县| 永靖县| 承德县| 扶沟县| 界首市| 聂拉木县| 富源县| 汝城县| 湖北省| 油尖旺区| 佛冈县| 龙陵县| 措勤县| 福泉市| 荥阳市| 唐山市| 临江市|