Добавление элемента в Seq в scala



Я работаю с scala play 2 с slick.
У меня есть Seq, как



val customerList: Seq[CustomerDetail] = Seq(CustomerDetail("id", "status", "name"))


Я хочу добавить элемент CustomerDetail в этот список клиентов. Как я могу это сделать?
Я уже пробовал



customerList :+ CustomerDetail("1", "Active", "Shougat")


Но это не делать ничего.

712   2  

2 ответов:

Две вещи. Когда вы используете :+, операция является левой ассоциативной, то есть элемент, на котором вы вызываете метод, должен быть слева.

Теперь, Seq (как используется в вашем примере) относится к immutable.Seq. При добавлении или предварении элемента он возвращает новую последовательность , содержащую дополнительный элемент, но не добавляет его к существующей последовательности.

val newSeq = CustomerDetail("1", "Active", "Shougat") :+ customerList

Но добавление элемента означает обход всего списка, чтобы добавить элемент, рассмотрим предписание:

val newSeq = customerList +: CustomerDetail("1", "Active", "Shougat")

Упрощенный пример:

scala> val original = Seq(1,2,3,4)
original: Seq[Int] = List(1, 2, 3, 4)

scala> val newSeq = 0 +: original
newSeq: Seq[Int] = List(0, 1, 2, 3, 4)

Возможно, стоит отметить, что в то время как Seq оператор добавления элемента, :+, являетсялевым ассоциативным , оператор добавления, +:, являетсяправым ассоциативным .

Итак, если у вас есть коллекция Seq с элементами List:

scala> val SeqOfLists: Seq[List[String]] = Seq(List("foo", "bar"))
SeqOfLists: Seq[List[String]] = List(List(foo, bar))

И вы хотите добавить еще один "elem" в Seq, добавление выполняется следующим образом:

scala> SeqOfLists :+ List("foo2", "bar2")
res0: Seq[List[String]] = List(List(foo, bar), List(foo2, bar2))

А предписание делается так:

scala> List("foo2", "bar2") +: SeqOfLists
res1: Seq[List[String]] = List(List(foo2, bar2), List(foo, bar))

Как описано в API doc :

Мнемоника для +: против :+ это: ободочная кишка переходит на сторону коллекции.

Пренебрежение этим при работе с коллекциями коллекций может привести к неожиданным результатам, т. е.:

scala> SeqOfLists +: List("foo2", "bar2")
res2: List[Object] = List(List(List(foo, bar)), foo2, bar2)

Comments

    Ничего не найдено.