在Scala的for表达式中,可以使用yield关键字来生成新的集合:
val nieces = Array("java", "python", "scala", "php")
for (n <- nieces) yield n.capitalize
// 使用 for/yield 创建新数组
var temp = for (i <- Array(1, 5, 3, 7)) yield i * 2
println(temp.toBuffer)
输出结果如下:
nieces: Array[String] = Array(java, python, scala, php)
res113: Array[String] = Array(Java, Python, Scala, Php)
yield的主要作用是记住每次迭代中的有关值,并逐一存入到一个集合中, 循环结束后将返回该集合。其语法如下:
for {子句} yield {变量或表达式}。
例如,下面两句是等价的:
// 遍历集合,返回一个新的集合
val newArray1 = for (e <- nieces) yield e.toUpperCase
// 等价于上一句
val newArray2 = for (e <- nieces) yield {
val s = e.toUpperCase
s
}
输出结果如下:
newArray1: Array[String] = Array(JAVA, PYTHON, SCALA, PHP)
newArray2: Array[String] = Array(JAVA, PYTHON, SCALA, PHP)
var a = 0;
val numList = List(1,2,3,4,5,6,7,8,9,10);
// for 循环
var retVal = for( a <- numList
if a != 3; if a < 8
) yield a
// 输出返回值
for( a <- retVal){
println( "a = " + a );
}
从一个已经存在的集合根据一定的算法生成一个新的集合:
// 给定一个数组
val names2 = Array("chris", "ed", "maurice")
val capNames = for (e <- names2) yield e.capitalize
// 算法可能有多行
val lengths = for (e <- names2) yield {
// 多行代码
e.length
}
val fruits = "apple" :: "banana" :: "orange" :: Nil
val out = for (e <- fruits) yield e.toUpperCase
// 调用map方法完成同样的事
val out3 = fruits.map(_.toUpperCase)
yield关键字的简短总结:
-
针对每一次for循环的迭代,yield会产生一个值,被循环记录下来;
-
当循环结束后, 会返回所有yield的值组成的集合;
-
© 版权声明
本站网络名称:
知趣
本站永久网址:
https://www.qubaa.top
网站侵权说明:
本网站的文章部分内容可能来源于网络,仅供大家学习与参考,如有侵权,请联系站长删除处理。
1 本站一切资源不代表本站立场,并不代表本站赞同其观点和对其真实性负责。
2 本站一律禁止以任何方式发布或转载任何违法的相关信息,访客发现请向站长举报
3 本站资源大多存储在云盘,如发现链接失效,请联系我们我们会第一时间更新。
1 本站一切资源不代表本站立场,并不代表本站赞同其观点和对其真实性负责。
2 本站一律禁止以任何方式发布或转载任何违法的相关信息,访客发现请向站长举报
3 本站资源大多存储在云盘,如发现链接失效,请联系我们我们会第一时间更新。
THE END
暂无评论内容