Kotlin generateSequence 迭代器 从1开始产生1000个素数 take 得介绍

这里用到了 take函数

他是从

元数据里面取出来对应个数得元素并且返回

如果没到这个元素也返回当前元素

就是我要取出来1000个数据但是实际里面就是670个 那么他就会返回670个

如果里面1001 个那么他就取出来1000个数据

generateSequence

般针对某个序列,你可能会定义一个只要序列有新值产生就被调用一下的函数,这样的函数叫迭代器函数。

generateSequence  函数接受一个初始种子值作为序列的起步值,在用 generateSequence 定义的序列上调用一个函数时,generateSequence  函数会调用你指定的迭代器函数,决定下一个要生产的值
 

上代码

fun Int.isPrime(): Boolean {
    (2 until this).map {
        if (this % it == 0) return false
    }
    return true
}


fun main() {
    //你想产生头1000个素数
    //假定 0-5000之内,可以找到1000个素数
    val toList = (1..5000).toList().filter { it.isPrime() }.take(1000)
    //打印发现只有670个素数 正常想法是用while 来完成这个需求。but。。也可以通过一些特殊手段来完成
    println(toList.size)
    println(toList)

    // 我们可以通过序列生成想要得数据
    //seed 1 是起始值 value+1 就是步长是1
    val content = generateSequence(1) { value ->
        value + 1
    }.filter { it.isPrime() }.take(1000).toList()
    println(content.size)
    println(content)


}

 相比 while得冗余运算,非常得时尚。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

安果移不动

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值