Как переместить предмет в Scala Seq? - PullRequest
0 голосов
/ 09 января 2019

Допустим, у меня есть класс case, подобный этому:

case class Card(id: UUID, title: String)

и класс Bucket, подобный этому:

case class Bucket(id: UUID, title: String, cards: Seq[Card]) {
 def moveCard(cardId: UUID, newIndex: Int): Bucket = 
   copy(cards = {
    ???
  })
}

Как мне заполнить метод moveCard (), чтобы найти данную карту и переместить ее в новый индекс последовательности?

1 Ответ

0 голосов
/ 09 января 2019

Вы можете использовать двойную дозу patch(), чтобы переместить предмет в новое место. К сожалению, это немного отличается в зависимости от направления, вперед или назад.

case class Bucket(id: UUID, title: String, cards: Seq[Card]) {
  def moveCard(cardId: UUID, newIndex: Int): Bucket = {
    val from = cards.indexWhere(_.id == cardId)
    if (from < 0) throw new Error("no such card")
    copy(cards =
      if (from < newIndex)
        cards.patch(newIndex+1,Seq(cards(from)),0).patch(from,Seq(),1)
      else
        cards.patch(newIndex,Seq(cards(from)),0).patch(from+1,Seq(),1)
        )
  }
}

Или это очень хорошее упрощение, предложенное @LeoC:

copy(cards = cards.patch(from, Seq(), 1).patch(newIndex, Seq(cards(from)), 0))
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...