2017-11-23 9 views
0
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) 
} 

上記のコードは、いくつかのリストを連結することになっています。しかし、結果は空のリストです。どうして?forループ内のリストに要素を追加する

答えて

2

あなたの間違いはlocations ::: List(Location(x, y))です。これはリストを連結していますが、結果は何もしません。 locations = locations ::: List(Location(x, y))と交換すると、望みの結果が得られます。

しかし、Scalaではこの問題を解決するための慣用的な方法があります。 Scalaでは、変更可能なコードを書くことが好ましいスタイルです(可能であればvarではなくvalを使用します)。

ここでそれを行うにはいくつかの方法です:

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

がさらに短く:

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

編集:TABULATEを使用して

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

:利回りを使用して

だけあなたが気づいた0 to 10が含まれています。 0 until 10は包括的ではありません。私はargsを表11に変更しました。

関連する問題