use*_*255 7 scala scala-2.8 scala-collections
为什么方法transform
(在就地突变版本map
)和retain
(就地突变版本filter
)是只定义mutable.Map
,但不mutable.Buffer
和mutable.Set
?所有可变集合都不支持这些方法吗?
的操作retain
和transform
的Map
是大约键和值,这是不的一部分的概念Set
或一个Buffer
.
Map是一个Iterable,由成对的键和值组成(也称为映射或关联).
地图上的基本操作与集合上的基本操作类似.
但您的操作列在:
可变的地图支持除了在下表中总结的操作.
ms transform f
Run Code Online (Sandbox Code Playgroud)
ms
使用函数转换map中的所有关联值f
.
ms retain p
Run Code Online (Sandbox Code Playgroud)
只保留那些
ms
具有key
令人满意的谓词的映射p
.
一零零一评论:
retain
并且transform
基本上是就地变异版本filter
和,map
并且可以很容易地定义Set
和Buffer
.
我不知道他们是如何Map
特定的.
我认为,retain
并transform
提供具体地图的实现(因为它们的执行情况,特别与键和值交易)像所提供的那些功能map
和filter
从TraversableLike
.
实施transform
中Set
,并Buffer
不会增加什么价值,因为它只会deffer来map
.
注:Michael Kebe评论:
还有一件事.
immutable.MapLike
有方法transform
,但不是方法retain
.
(与之相反mutable.MapLike
)
然而,如果变换通过过滤和转换现有地图的绑定来生成新地图,则这似乎与变换操作的性质一致.
def transform[C, That](f: (A, B) => C)(implicit bf: CanBuildFrom[This, (A, C), That]): That = {
val b = bf(repr)
for ((key, value) <- this) b += ((key, f(key, value)))
b.result
}
Run Code Online (Sandbox Code Playgroud)
retain
但是,源代码修改了当前实例,该实例只能与Mutable对象兼容:
/** Retains only those mappings for which the predicate
* `p` returns `true`.
*
* @param p The test predicate
*/
def retain(p: (A, B) => Boolean): this.type = {
for ((k, v) <- this ; if !p(k, v))
this -= k
this
}
Run Code Online (Sandbox Code Playgroud)
归档时间: |
|
查看次数: |
352 次 |
最近记录: |