在函数式编程语言中,集合上最原始/基本的操作是同态映射 `map`;它(大致上)是 `Collection[A] -> (A->B) -> Collection[B]`。
Rust 集合似乎不支持这个操作。我猜这是因为它们是可变集合;如果你已经在使用可变集合,那么原地更新更加高效。
是否有一个单独的“不可变集合”库(类似于 Scala)我错过了?
那么,“原地 map”操作呢?它使用 `A->B` 将 `Collection[A]` 变异为 `Collection[B]`(与 ML 和 Haskell 不同,由于关联类型,这实际上是安全的!)甚至特殊情况下,其中 `A=B` 并且原地映射采用 `A->A`?
很难用搜索引擎回答这个问题,因为所有的结果都涉及到 “map” 这个名词(如 `HashMap`)。
Rust 集合似乎不支持这个操作。我猜这是因为它们是可变集合;如果你已经在使用可变集合,那么原地更新更加高效。
是否有一个单独的“不可变集合”库(类似于 Scala)我错过了?
那么,“原地 map”操作呢?它使用 `A->B` 将 `Collection[A]` 变异为 `Collection[B]`(与 ML 和 Haskell 不同,由于关联类型,这实际上是安全的!)甚至特殊情况下,其中 `A=B` 并且原地映射采用 `A->A`?
很难用搜索引擎回答这个问题,因为所有的结果都涉及到 “map” 这个名词(如 `HashMap`)。
collect()
,满足您所有的FP需求。什么是原地映射? - Tatsuyuki Ishifmap
并保持结构不变。例如,如果你有一个哈希表,如果你使用fmap
改变值,那么键中的任何一个都不需要重新计算哈希值。 - Dietrich Epp