私はscalaスリックで2をプレイします。私は次のようなSeqを持っています
val customerList: Seq[CustomerDetail] = Seq(CustomerDetail("id", "status", "name"))
このcustomerListにCustomerDetailアイテムを追加したいと思います。これどうやってするの?私はすでに試しました
customerList :+ CustomerDetail("1", "Active", "Shougat")
しかし、これは何もしません。
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)
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)