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

首頁 > 系統 > Android > 正文

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

2019-12-12 00:47:19
字體:
來源:轉載
供稿:網友

前言

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

關于c#中的yield關鍵字大家可以參考這篇文章:http://m.survivalescaperooms.com/article/63859.htm

我使用的是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) }}

總結

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

發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
主站蜘蛛池模板: 新野县| 东至县| 伊通| 英吉沙县| 灵台县| 瓦房店市| 藁城市| 昌吉市| 来凤县| 略阳县| 扎鲁特旗| 巨野县| 新安县| 霞浦县| 闽侯县| 呼伦贝尔市| 化德县| 伊金霍洛旗| 永昌县| 阳新县| 凉城县| 北安市| 巴塘县| 襄垣县| 资阳市| 岳阳市| 新余市| 高唐县| 毕节市| 武威市| 旅游| 山阴县| 大姚县| 阿克| 如东县| 山阳县| 广德县| 黄石市| 南丰县| 大邑县| 宝鸡市|