最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

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

 更新時(shí)間:2018年06月22日 10:22:26   作者:編寫人生  
在語(yǔ)句中使用 yield 關(guān)鍵字,則指示在的方案、運(yùn)算符或 get 訪問(wèn)器是迭代器。下面這篇文章主要給大家介紹了關(guān)于Kotlin如何使用類似C#的yield功能的相關(guān)資料,需要的朋友可以參考借鑒,下面來(lái)一起看看吧

前言

用過(guò)c#的可能對(duì) yield 關(guān)鍵字愛(ài)不釋手,那么在像我這種被迫上java賊船的人,就想找到類似的功能。

關(guān)于c#中的yield關(guān)鍵字大家可以參考這篇文章:http://www.fzitv.net/article/63859.htm

我使用的是kotlin,下面的方法演示了產(chǎn)生一個(gè)序列的功能。

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)
 }
}

程序?qū)?zhí)行50次然后退出。

實(shí)現(xiàn)枚舉器

上面的代碼使用的是序列功能,并非是常見(jiàn)的枚舉器,下面的代碼更像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)
 }
}

實(shí)現(xiàn)類似Linq

我們?cè)谑褂肔inq時(shí)可以將序列不斷的變換,Kotlin也可以很方便的處理。

//將輸入的數(shù)據(jù) + 1
fun 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 ")
 }
 }
}

//將多個(gè)數(shù)據(jù)聚合到一個(gè)數(shù)據(jù)
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)
 }
}

總結(jié)

以上就是這篇文章的全部?jī)?nèi)容了,希望本文的內(nèi)容對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,如果有疑問(wèn)大家可以留言交流,謝謝大家對(duì)腳本之家的支持。

相關(guān)文章

最新評(píng)論

固安县| 定边县| 铜陵市| 绥芬河市| 峡江县| 阜城县| 公安县| 乌苏市| 红河县| 高阳县| 金坛市| 平定县| 丰原市| 鄂伦春自治旗| 榕江县| 肇源县| 东乌珠穆沁旗| 齐齐哈尔市| 通城县| 同心县| 临汾市| 淮阳县| 南靖县| 额济纳旗| 张北县| 香河县| 崇礼县| 兴安盟| 连山| 武强县| 留坝县| 闵行区| 佛教| 崇义县| 古田县| 团风县| 社旗县| 望都县| 沂源县| 东乡族自治县| 丰县|