簡體   English   中英

如何在Scala Seq中移動項目?

[英]How to move an item in a Scala Seq?

假設我有一個這樣的案例類:

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()方法以找到給定的卡並將其移動到序列中的新索引?

您可以使用兩倍劑量的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))

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM