当前位置:   article > 正文

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

generatesequence

这里用到了 take函数

他是从

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

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

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

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

generateSequence

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

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

上代码

  1. fun Int.isPrime(): Boolean {
  2. (2 until this).map {
  3. if (this % it == 0) return false
  4. }
  5. return true
  6. }
  7. fun main() {
  8. //你想产生头1000个素数
  9. //假定 0-5000之内,可以找到1000个素数
  10. val toList = (1..5000).toList().filter { it.isPrime() }.take(1000)
  11. //打印发现只有670个素数 正常想法是用while 来完成这个需求。but。。也可以通过一些特殊手段来完成
  12. println(toList.size)
  13. println(toList)
  14. // 我们可以通过序列生成想要得数据
  15. //seed 1 是起始值 value+1 就是步长是1
  16. val content = generateSequence(1) { value ->
  17. value + 1
  18. }.filter { it.isPrime() }.take(1000).toList()
  19. println(content.size)
  20. println(content)
  21. }

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

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/IT小白/article/detail/509108
推荐阅读
相关标签
  

闽ICP备14008679号