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

首頁 > 開發 > 綜合 > 正文

Kotlin如何使用類似C#的yield功能詳解

2024-07-21 23:03:47
字體:
來源:轉載
供稿:網友

前言

用過c#的可能對 yield 關鍵字愛不釋手,那么在像我這種被迫上java賊船的人,就想找到類似的功能。

我使用的是kotlin,下面的方法演示了產生一個序列的功能。

val fibonacciSeq = buildSequence { var a = 0 var b = 1 yield(1) while (true) { yield(a + b) val tmp = a + b a = b b = tmp }}fun main(args: Array<String>){ fibonacciSeq.take(50).forEach { println(it) }}

程序將執行50次然后退出。

實現枚舉器

上面的代碼使用的是序列功能,并非是常見的枚舉器,下面的代碼更像c#的枚舉器。

class MyList : Iterable<Int>{ private val list = arrayOf(1,2,3,4,5,6) override fun iterator(): Iterator<Int> { return buildIterator { val size = list.size for(i in 0 until size) { yield(list[i] + i) } } }}fun main(args: Array<String>){val list = MyList() for (p in list) { println(p) }}

實現類似Linq

我們在使用Linq時可以將序列不斷的變換,Kotlin也可以很方便的處理。

//將輸入的數據 + 1fun Do1(seq : Sequence<Int>) : Sequence<Int>{ return buildSequence { for (i in seq){ yield(i + 1) } }}//變換成字符串fun Do2(seq : Sequence<Int>) : Sequence<String>{ return buildSequence { for (i in seq){ yield("hello $i ") } }}//將多個數據聚合到一個數據fun Do3(seq : Sequence<String>) : Sequence<String>{ return buildSequence{ var result = "" var count = 0 for (i in seq){ result += i count++ if(count == 3){ yield(result) result = "" count = 0 } } if(count > 0){ yield(result) } }}fun main(args: Array<String>){ val data = arrayOf(1,2,3,4,5,6,7,8) val result = Do3(Do2(Do1(data.asSequence()))) for (p in result){ println(p) }}

總結

以上就是這篇文章的全部內容了,希望本文的內容對大家的學習或者工作具有一定的參考學習價值,如果有疑問大家可以留言交流,謝謝大家對VeVb武林網的支持。


注:相關教程知識閱讀請移步到kotlin教程頻道。
發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
主站蜘蛛池模板: 沾化县| 梁平县| 定南县| 吉木乃县| 余江县| 靖西县| 赤峰市| 吴江市| 德化县| 铜川市| 饶阳县| 马鞍山市| 拜泉县| 利川市| 农安县| 松桃| 进贤县| 孟津县| 鄂托克旗| 阜新| 长丰县| 观塘区| 峨眉山市| 宜宾县| 湟源县| 加查县| 都安| 绥化市| 安阳县| 阳江市| 江津市| 石渠县| 天等县| 普陀区| 新巴尔虎右旗| 比如县| 霍州市| 瑞金市| 大田县| 北流市| 枣阳市|