perché i metodi transform
(sul posto versione mutazione del map
) e retain
(sul posto versione mutazione del filter
) sono definiti solo su mutable.Map
ma non su mutable.Buffer
e mutable.Set
? shouldnt tutte le collezioni mutabili supportano questi metodi?inconsistenza di scala 2.8 collezioni?
risposta
Le operazioni retain
e transform
di Map
sono sulle chiavi e valori, concetti che non fanno parte di un Set
o un Buffer
.
Una mappa è un Iterable costituito da coppie di chiavi e valori (denominati anche associazioni o associazioni).
Le operazioni fondamentali sulle mappe sono simili a quelle sui set.
Ma le operazioni sono elencati in:
mappe Mutevole sostenere oltre le operazioni riassunte nella tabella seguente.
ms transform f
Converte tutti i valori associati nella cartina
ms
con funzionef
.
ms retain p
Mantiene solo quelle mappature in
ms
che hanno unkey
soddisfacente predicatop
.
one-zero-zero-one commenti:
retain
etransform
sono essenzialmente in-place versioni mutazione difilter
emap
rispettivamente, e possono essere facilmente definiti inSet
eBuffer
.
Non vedo come sonoMap
-specific.
Direi che retain
e transform
offerta conforme alla Mappa implementazioni (in quanto la loro applicazione si occupa specificamente di chiavi e valori) per le caratteristiche come quelli forniti da map
e filter
da TraversableLike
.
L'implementazione di transform
in Set
e Buffer
aggiungerebbe poco valore dato che sarebbe semplicemente differito a map
.
Nota: Michael Kebe commenti:
più una cosa.
immutable.MapLike
ha il metodotransform
, ma non il metodoretain
.
(al contrario di mutable.MapLike
che ha sia)
Questo sembra tuttavia in linea con la natura delle transformation operations se trasformare produce una nuova mappa filtrando e trasformando legature di una mappa esistente.
Ecco la 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
, tuttavia, ha modificato l'istanza corrente, che può essere compatibile solo con oggetti mutabili:
/** 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' e' transform' sono essenzialmente versioni di mutazione sul posto di 'filter' e' map' rispettivamente e possono essere facilmente definiti su 'Set' e' Buffer'. Non vedo come siano specifici di 'Map'. –
@one: il modo in cui sono documentati implica nozioni specifiche della mappa. Ma hai ragione, potrebbero essere estesi a Set e Buffer. Tuttavia, poiché 'filter' e' map' sono già presenti, potrebbe essere necessario meno per 'Set' e' Buffer'. – VonC
@ one-zero-zero-one: ho aggiornato la mia risposta per riflettere sul tuo commento. – VonC
- 1. Incoerenze di collezioni Scala
- 2. Scala 2.8 Breakout
- 3. buffer circolare di collezioni scala
- 4. collezioni Scala diagramma di flusso
- 5. Micro benchmark per il confronto di collezioni mutabili e immutabili Scala con java.util.concurrent * collezioni
- 6. La deforestazione in collezioni Scala
- 7. Pacchetto modificatore privato in Scala 2.8
- 8. Scala 2.8 gestisce correttamente Boolean e java.lang.Boolean?
- 9. Scala 2.8 Attore documento di progettazione? Documento di design Akka?
- 10. Come si implementa una raccolta in Scala 2.8?
- 11. mutable vs. immutable nelle collezioni Scala
- 12. aggregazione groupwise efficiente su collezioni Scala
- 13. Iteratori per collezioni mutabili in Scala?
- 14. È possibile creare un'API di raccolta come Scala 2.8 in Haskell?
- 15. Possiamo abbinare Qualsiasi a un tipo generico? [Scala 2.8]
- 16. Posso nominare una tupla (definire una struttura?) In Scala 2.8?
- 17. Compilare Scala codice 2.8.x con Apache Buildr
- 18. maven and lift using scala 2.8: lift-mapper mancante?
- 19. Come si specifica una matrice statica in un'annotazione Scala 2.8?
- 20. Esiste un ciclo do-until (postcondition) in Scala 2.8?
- 21. cattura tutte le eccezioni in Scala 2.8 RC1
- 22. Come raggruppare utilizzando più colonne nelle collezioni di scala
- 23. Come rendere le collezioni immutabili di Scala detenere oggetti immutabili
- 24. Scala situazione di stallo con le collezioni parallele
- 25. Tipo Scala di tipo e tipo this.type in collezioni
- 26. come passare una stringa * scala vararg a un metodo Java utilizzando Scala 2.8
- 27. più codice "funzionale" Making a Scala per utilizzare collezioni immutabili
- 28. Come funziona la gestione della memoria per le collezioni Scala?
- 29. Quali operazioni sulle collezioni parallele Scala sono parallelizzate?
- 30. passaggio numero variabile di argomenti a Scala (2.8) caso di classe al costruttore genitore
più una cosa. 'immutable.MapLike' ha il metodo' transform', ma non il metodo 'retain'. –
@michael: Ho aggiornato la mia risposta per tenere conto di questa differenza. – VonC