[英]Generating values programmatically scala
是否可以在Scala中使用函数递归生成一系列值?
像这样:
def generateVal (nbrOfVal: Int) {
for (i <- 1 to nbrOfVal) {
val foo[i] = Seq.fill(6)(nextInt(100))}
}
这样就可以直接使用val了。
例如generateVal(2)将给出:
foo1: Seq[Int] = List(52, 83, 33, 85, 36, 39)
foo2: Seq[Int] = List(84, 47, 53, 66, 13, 72)
然后我们可以做:
foo1.zipAll(foo2, 0, 0).map { case (a, b) => a + b }
res: Seq[Int] = List(136, 130, 86, 151, 49, 111)
这是一个完整的示例, println
语句可用于调试(以查看发生了什么情况)。 他们通常会减慢执行速度...
import scala.util.Random
object Randoms extends App {
def generateVal(numOfLists: Int, numOfElements: Int): Seq[Seq[Int]] =
for (i <- 1 to numOfLists) yield {
Seq.fill(numOfElements)(Random.nextInt(100))
}
val (numOfLists, numOfElements) = (2, 5)
val listOfLists = generateVal(numOfLists, numOfElements)
// listOfLists foreach println // debug
val startingList = Seq.fill(numOfElements)(0) // must have same # of elements, for zipping!
val finalList = listOfLists.fold(startingList) { (s1, s2) =>
//println(s"s1 = $s1") // debug
//println(s"s2 = $s2") // debug
(s1 zip s2) map { case (a, b) => a + b }
}
// println(finalList)
}
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.