por qué el métodos (versión mutación en el lugar de map
) transform
y retain
(versión mutación en el lugar de filter
) se definen solamente en mutable.Map
pero no en mutable.Buffer
y mutable.Set
? ¿No deberían todas las colecciones mutables respaldar estos métodos?scala 2.8 inconsistencia de colecciones?
Respuesta
Las operaciones retain
y transform
de Map
son sobre las claves y valores, conceptos que no son parte de un Set
o una Buffer
.
Un mapa es un Iterable que consiste en pares de claves y valores (también llamados mapeos o asociaciones).
Las operaciones fundamentales en los mapas son similares a las de los conjuntos.
Pero sus operaciones se enumeran en:
mapas mutables apoyar además las operaciones que se resumen en la siguiente tabla.
ms transform f
Transforma todos los valores asociados en el mapa
ms
con la funciónf
.
ms retain p
se queda sólo con esas asignaciones en
ms
que tienen unkey
satisfacer predicadop
.
one-zero-zero-one comentarios:
retain
ytransform
son esencialmente versiones de mutación en lugar defilter
ymap
, respectivamente, y se pueden definir fácilmente enSet
yBuffer
.
No veo cómo sonMap
-específicas.
Yo diría que retain
y transform
ofrecen implementaciones-mapa específico (en que su aplicación se ocupa específicamente de claves y valores) para características como los proporcionados por map
y filter
de TraversableLike
.
La implementación de transform
en Set
y Buffer
agregará poco valor, ya que simplemente deffer a map
.
Nota: Michael Kebe comentarios:
Una cosa más.
immutable.MapLike
tiene el métodotransform
, pero no el métodoretain
.
(en contraposición a mutable.MapLike
que tiene ambos)
Esto parece sin embargo, en línea con la naturaleza de transformation operations si transformada produce un nuevo mapa por filtrado y transformación de las consolidaciones de un mapa existente.
Aquí es el source code for transform
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
}
Source code for retain
, sin embargo, modificar la instancia actual, que sólo puede ser compatible con los objetos mutables:
/** 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
}
-1, 'retain' y' transform' son esencialmente versiones de mutación in situ de 'filter' y' map' respectivamente y se pueden definir fácilmente en 'Set' y' Buffer'. No veo cómo son específicos de 'Map'. –
@one: la forma en que están documentados implica nociones específicas del mapa. Pero tienes razón, podrían extenderse a Set y Buffer. Sin embargo, dado que 'filter' y' map' ya están allí, puede ser que esto sea menos necesario para 'Set' y' Buffer'. – VonC
@ one-zero-zero-one: He actualizado mi respuesta para que refleje su comentario. – VonC
- 1. ¿Cómo implemento una colección en Scala 2.8?
- 2. Incoherencias de Colecciones Scala
- 3. ¿Cómo funciona el Manifiesto de Scala (2.8)?
- 4. Scala 2.8 TreeMap y pedido personalizado
- 5. Scala 2.8 maneja Boolean y java.lang.Boolean correctamente?
- 6. Transposición de colecciones arbitrarias de colecciones en Scala
- 7. En las colecciones de Scala 2.8, ¿por qué se ha agregado el tipo de Traversable arriba Iterable?
- 8. La deforestación en colecciones Scala
- 9. Java/Scala (profundidad) colecciones interoperabilidad
- 10. Scala interbloqueo con colecciones paralelas
- 11. nuevo código {} Iterable de Scala 2.7.7 a 2.8
- 12. control de scala 2.8 Excepción: ¿cuál es el punto?
- 13. Compilar el código de Scala 2.8.x con Apache Buildr
- 14. colecciones paralelas de scala grado de paralelismo
- 15. Clases de casos de Scala en colecciones
- 16. Iteraciones sobre colecciones de Java en Scala
- 17. Operando en las colecciones de Scala de manera genérica
- 18. ¿Puedo nombrar una tupla (definir una estructura?) En Scala 2.8?
- 19. ¿Hay un ciclo do-until (poscondición) en Scala 2.8?
- 20. maven y lift usando scala 2.8: ¿falta mapper?
- 21. capturar todas las excepciones en Scala 2.8 RC1
- 22. Cómo portar el código de Scala 2.7.7 que usa scala.collection.jcl para Scala 2.8?
- 23. Colecciones paralelas en Scala 2.9 y actores
- 24. ¿Inconsistencia de TSQL Round()?
- 25. Instancia de inconsistencia
- 26. Cómo usar colecciones mutables en Scala
- 27. Iteradores para colecciones mutables en Scala?
- 28. Micro-punto de referencia que compara las colecciones mutables e inmutables de Scala con las colecciones java.util.concurrent. *
- 29. asp.net mvc casilla inconsistencia
- 30. Inconsistencia usando printf
Una cosa más. 'inmutable.MapLike' tiene el método' transform', pero no el método 'retain'. –
@michael: He actualizado mi respuesta para tener en cuenta esa diferencia. – VonC