• Scala学习之for 循环和 yield 的例子


        for循环中的 yield 会把当前的元素记下来,保存在集合中,循环结束后将返回该集合。Scala中for循环是有返回值的。如果被循环的是Map,返回的就是Map,被循环的是List,返回的就是List,以此类推。

    例1:

    1 scala> for (i <- 1 to 5) yield i
    2 res10: scala.collection.immutable.IndexedSeq[Int] = Vector(1, 2, 3, 4, 5)

    例2:

    1 scala> for (i <- 1 to 5) yield i * 2
    2 res11: scala.collection.immutable.IndexedSeq[Int] = Vector(2, 4, 6, 8, 10)

    例3: for/yield 循环的求模操作:

    1 scala> for (i <- 1 to 5) yield i % 2
    2 res12: scala.collection.immutable.IndexedSeq[Int] = Vector(1, 0, 1, 0, 1)

    例4:Scala 数组上的 for 循环 yield 的例子

     1 scala> val a = Array(1, 2, 3, 4, 5)
     2 a: Array[Int] = Array(1, 2, 3, 4, 5)
     3  
     4 scala> for (e <- a) yield e
     5 res5: Array[Int] = Array(1, 2, 3, 4, 5)
     6  
     7 scala> for (e <- a) yield e * 2
     8 res6: Array[Int] = Array(2, 4, 6, 8, 10)
     9  
    10 scala> for (e <- a) yield e % 2
    11 res7: Array[Int] = Array(1, 0, 1, 0, 1)

    例5:for 循环, yield, 和守卫( guards) (for loop 'if' conditions)

    假如你熟悉了 Scala 复杂的语法, 你就会知道可以在 for 循环结构中加上 'if' 表达式. 它们作为测试用,通常被认为是一个守卫,你可以把它们与 yield 语法联合起来用。参见::

    1 scala> val a = Array(1, 2, 3, 4, 5)
    2 a: Array[Int] = Array(1, 2, 3, 4, 5)
    3  
    4 scala> for (e <- a if e > 2) yield e
    5 res1: Array[Int] = Array(3, 4, 5)

    加上了 "if e > 2" 作为守卫条件用以限制得到了只包含了三个元素的数组.

    例6:Scala for 循环和 yield 的例子 - 总结

    如果你熟悉 Scala 的 loop 结构, 就会知道在 for 后的圆括号中还可以许更多的事情. 你可以加入 "if" 表达式,或别的语句, 比如下面的例子,可以组合多个 if 语句:

    1 def scalaFiles =
    2   for {
    3     file <- filesHere
    4     if file.isFile
    5     if file.getName.endsWith(".scala")
    6   } yield file

    yield 关键字的简短总结:

    • 针对每一次 for 循环的迭代, yield 会产生一个值,被循环记录下来 (内部实现上,像是一个缓冲区).
    • 当循环结束后, 会返回所有 yield 的值组成的集合.
    • 返回集合的类型与被遍历的集合类型是一致的.

    转自:http://unmi.cc/scala-yield-samples-for-loop/感谢作者无私分享!

  • 相关阅读:
    作为计算机专业的过来人:想学好C 语言,你必须要知道这3个原因(强烈推荐)
    C语言从1972年诞生至今,能够恒久不衰,是怎么做到的?
    这4种胜过C语言的 C++ 强制转换方法,真的好用到爆...(建议收藏)
    一纸学历证书真的胜过多年工作经验吗?HR更看重程序员什么地方?
    《个人-GIT使用方法》
    java Comparable 和 Cloneable接口
    Java 文本I/O 处理
    java 异常处理
    java的一维数组
    java中String类型
  • 原文地址:https://www.cnblogs.com/sunfie/p/4983841.html
Copyright © 2020-2023  润新知