При чтении do c (https://www.scala-lang.org/api/2.12.4/scala/collection/immutable/Vector.html) не представляется возможным установить максимальное количество элементов в векторе, когда максимальное количество элементов достигнуто, элементы сначала отбрасываются в , первым вышел.
Для этого я мог бы сделать что-то вроде:
var a = Vector[Double]
val MAX_ELEMENTS = 1000
def addElement(element: Double) = {
if(a.size() == MAX_ELEMENTS){
a = a.dropRight(a.length())
}
a = a :+ element
}
Но это кажется очень неэффективным. Есть ли более элегантный способ поддерживать постоянное количество элементов в векторе, когда вектор достигает заранее определенного размера?
Обновление: использование очереди достигает того, что я хочу:
Это подход, который я использую с расширением стандартного класса mutable.Queue Scala.
class LimitedQueue[A](maxSize: Int) extends mutable.Queue[A] {
override def +=(elem: A): this.type = {
if (length >= maxSize) dequeue()
appendElem(elem);
this
}
}
And simple use-case
var q2 = new LimitedQueue[Int](2)
q2 += 1
q2 += 2
q2 += 3
q2 += 4
q2 += 5
q2.foreach { n =>
println(n)
}
from Максимальная длина для scala очереди