Javaで次のコードを適切に機能する方法で実行するためのScalaでの最良の方法は何ですか?
LinkedList<Item> itemsInRange = new LinkedList<Item>();
for (int y = 0; y < height(); y++) {
for (int x = 0; x < width(); x++) {
Item it = myMap.getItemAt(cy + y, cx + x);
if (it != null)
itemsInRange.add(it);
}
}
// iterate over itemsInRange later
もちろん、命令型の方法で直接 Scala に変換できます。
val itemsInRange = new ListBuffer[Item]
for (y <- 0 until height) {
for (x <- 0 until width) {
val it = tileMap.getItemAt(cy + x, cx + x)
if (!it.isEmpty)
itemsInRange.append(it.get)
}
}
しかし、適切で機能的な方法でそれを行いたいと思います。
map
ある種の2D範囲で操作が必要だと思います。理想的には、入力パラメータおよび出力としておよびmap
を取得する関数を実行します。その後、次のようなものを取得します。それ以上は yield になります。私が正しければ、パズルの唯一の欠けているピースは、何らかの方法で 2D 範囲でそのマップ操作を行うことです。x
y
Option[Item]
Iterable[Option[Item]]
flatten
Iterable[Item]