(O (n) List
), . O (1) , O (1) . (), - .
Vector
:
def filter(numbers: List[Double], size: Int) = {
def walk(numbers: List[Double], buffer: Vector[Double], i: Int): List[Double] = {
numbers match {
case x :: tail => {
val nextBuffer = buffer(i) = x
val nextI = if (i == size) 0 else i + 1
val avg = buffer.foldLeft(0.0) { _ + _ } / size
avg :: walk(tail, nextBuffer, nextI)
}
case Nil => Nil
}
}
walk(numbers, Vector.empty, 0)
}
, , , numbers
. , .