5, "orange" -> 1, "banana" -> 3, "kiwi" -> 2) val used-6ren">
gpt4 book ai didi

Scala 数据结构 : chain of operations (such as mapValues, filter ...) 和中间结果

转载 作者:行者123 更新时间:2023-12-01 07:27:54 25 4
gpt4 key购买 nike

考虑以下:

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只是因为它是我在真实代码中使用的数据结构(尽管使用其他数据:))

最佳答案

您可以使用 view任何集合类的方法来创建集合的 View ,该 View 将应用类似 map 的方法和 filter懒洋洋。见 http://www.scala-lang.org/archives/downloads/distrib/files/nightly/docs/library/index.html#scala.collection.TraversableLike

关于Scala 数据结构 : chain of operations (such as mapValues, filter ...) 和中间结果,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14220412/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com