Конечный вектор - PullRequest
       87

Конечный вектор

0 голосов
/ 06 августа 2020

При чтении 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 очереди

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...