Scala es muy elegante en el filtrado de secuencias inmutables:Scala ArrayBuffer eliminar todos los elementos con un prédicat
var l = List(1,2,3,4,5,6)
l = l.filter(_%2==1)
pero ¿cómo puedo hacer esto con un colecciones mutables como ArrayBuffer? Todo lo que encontré es la eliminación de elementos individuales o sectores, o eliminar elementos de otra secuencia, pero nada que elimine elementos dados por un predicado.
Editar: Tenía la esperanza de encontrar algo similar aunque esto:
trait Removable[A] extends Buffer[A]{
def removeIf(p: A => Boolean){
var it1 = 0
var it2 = 0
while(it2 < length){
if(p(this(it2))){
it2 += 1;
}
else {
this(it1) = this(it2)
it1 += 1;
it2 += 1;
}
}
trimEnd(it2-it1)
}
}
estos filtros en tiempo lineal y puede ser mezclado en cualquier tampón, pero sólo ArrayBuffer tiene sentido, en ListBuffers sería lento, porque la indexación toma tiempo lineal.
Su 'filterInPlace' es lento, porque' b.Retire (i) 'es un método de O (n). –