国产探花免费观看_亚洲丰满少妇自慰呻吟_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教程頻道。
發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
主站蜘蛛池模板: 朔州市| 山阳县| 纳雍县| 积石山| 临沧市| 蚌埠市| 沈阳市| 蒙城县| 阿坝县| 双牌县| 蛟河市| 彭阳县| 尉犁县| 玉门市| 奉贤区| 东明县| 固原市| 商洛市| 福泉市| 包头市| 肇州县| 梓潼县| 会理县| 桐柏县| 雷山县| 香河县| 宾川县| 丹巴县| 永福县| 班戈县| 治县。| 苏尼特左旗| 舒兰市| 和平区| 固阳县| 灵川县| 额尔古纳市| 全州县| 长葛市| 清新县| 广汉市|