次のことを考慮してください。
val stuff = Map[String, Int]("apple" -> 5, "orange" -> 1, "banana" -> 3, "kiwi" -> 2)
val used = 1
val rest = stuff.mapValues{
case quantity => quantity - used
}.filterNot{
case (fruit, quantity) => quantity == 0
}
結果は
rest : scala.collection.immutable.Map[String,Int] = Map(apple -> 4, banana -> 2, kiwi -> 1)
私はScalaの専門家ではありませんが、言語が怠惰ではないことを知っています(Haskellとは異なります)。そのmapValues
ため、中間体が生成さMap
れ、それが入力として渡されますfilterNot
(チェーン内に他の操作があった場合)。 。
この役に立たない中間データ構造を回避するにはどうすればよいですか?
注:質問は他のデータ構造に一般化できることを理解しています。ここで使用Map
しているのは、実際のコードで使用していたデータ構造であるためです(ただし、他のデータも使用しています:))