在 for 循环中将元素添加到列表

Adding elements to a list in a for loop

var locations: List[Location] = List[Location]()
for (x <- 0 to 10; y <- 0 to 10) {
    println("x: " + x + " y: " + y)
    locations ::: List(Location(x, y))
    println(locations)
}

上面的代码应该连接一些列表。但结果是一个空列表。为什么?

你的错误在线locations ::: List(Location(x, y))。这是连接列表,但不对结果执行任何操作。如果将其替换为 locations = locations ::: List(Location(x, y)),您将获得所需的结果。

然而,在 Scala 中有更多惯用的方法来解决这个问题。在 Scala 中,编写不可变代码是首选风格(即尽可能使用 val 而不是 var)。

这里有几种方法:

使用产量:

val location = for (x <- 0 to 10; y <- 0 to 10) yield Location(x, y)

使用制表:

val location = List.tabulate(11, 11) { case (x, y) => Location(x, y) }

更短:

val location = List.tabulate(11, 11)(Location)

编辑:刚刚注意到您有 0 to 10,这是包容性的。 0 until 10 是包含 - 排除。我已将 args 更改为制表为 11。