這篇文章主要介紹Kotlin怎么使用類(lèi)似C#的yield功能,文中介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們一定要看完!

前言
用過(guò)c#的可能對(duì) yield 關(guān)鍵字愛(ài)不釋手,那么在像我這種被迫上java賊船的人,就想找到類(lèi)似的功能。
我使用的是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)類(lèi)似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)
}
}以上是“Kotlin怎么使用類(lèi)似C#的yield功能”這篇文章的所有內(nèi)容,感謝各位的閱讀!希望分享的內(nèi)容對(duì)大家有幫助,更多相關(guān)知識(shí),歡迎關(guān)注創(chuàng)新互聯(lián)行業(yè)資訊頻道!
新聞名稱:Kotlin怎么使用類(lèi)似C#的yield功能-創(chuàng)新互聯(lián)
轉(zhuǎn)載源于:http://www.chinadenli.net/article16/idcdg.html
成都網(wǎng)站建設(shè)公司_創(chuàng)新互聯(lián),為您提供網(wǎng)站營(yíng)銷(xiāo)、自適應(yīng)網(wǎng)站、網(wǎng)站收錄、云服務(wù)器、搜索引擎優(yōu)化、用戶體驗(yàn)
聲明:本網(wǎng)站發(fā)布的內(nèi)容(圖片、視頻和文字)以用戶投稿、用戶轉(zhuǎn)載內(nèi)容為主,如果涉及侵權(quán)請(qǐng)盡快告知,我們將會(huì)在第一時(shí)間刪除。文章觀點(diǎn)不代表本網(wǎng)站立場(chǎng),如需處理請(qǐng)聯(lián)系客服。電話:028-86922220;郵箱:631063699@qq.com。內(nèi)容未經(jīng)允許不得轉(zhuǎn)載,或轉(zhuǎn)載時(shí)需注明來(lái)源: 創(chuàng)新互聯(lián)
猜你還喜歡下面的內(nèi)容
全網(wǎng)營(yíng)銷(xiāo)推廣知識(shí)