以编程方式生成值scala

时间:2016-08-05 14:26:20

标签: scala function

是否可以使用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)

1 个答案:

答案 0 :(得分:2)

以下是一个完整的示例,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)
}