web-dev-qa-db-ja.com

Seqにアイテムを追加するscala

私はscalaスリックで2をプレイします。私は次のようなSeqを持っています

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

このcustomerListにCustomerDetailアイテムを追加したいと思います。これどうやってするの?私はすでに試しました

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

しかし、これは何もしません。

6

2つのこと。 :+を使用する場合、操作はleft associativeです。つまり、メソッドを呼び出す要素は左側にある必要があります。

ここで、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)
7
Yuval Itzchakov

Seqはアイテム演算子を追加しますが、:+、isleft associative、prepend演算子、+:、は右結合性です。

したがって、Seq要素を持つListコレクションがある場合:

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

seqに別の「elem」を追加したい場合、追加は次のように行われます。

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ドキュメント で説明されているように:

+:vs。:+のニーモニックは、次のとおりです。COLonはCOLlection側に移動します。

コレクションのコレクションを処理するときにこれを無視すると、予期しない結果が発生する可能性があります。

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