How to create a seq

Hello,
How would you create a sequence of Landmarks from those two classes:

case class Landmark(id: String, point: Point[_3D])
case class Landmarks(values: Seq[Landmark[_3D]])

val idLM0 = seqLMs(0).attribute(“key”).get.toString() // get the first ID
val Pt0: Point[_3D] = Point(seqLMs(0).text.split(" “)(0).toDouble, seqLMs(0).text.split(” “)(1).toDouble, seqLMs(0).text.split(” ")(2).toDouble)
val LM0 = Landmark(idLM0, Pt0)

// Create a Seq of Landmark

def createLandmarks(LM0: Landmark[_3D], seqLMs: NodeSeq): Landmarks = {
// initial Seq
val LMsSeq: Seq[Landmark[_3D]] = Seq(LM0)

for (i <- 1 to seqLMs.length-1){
  val idLM01 = seqLMs(i).attribute("key").get.toString() // get the first ID
  val Pt: Point[_3D] = Point(seqLMs(i).text.split(" ")(0).toDouble, seqLMs(i).text.split(" ")(1).toDouble,
    seqLMs(i).text.split(" ")(2).toDouble)
  val LM = Landmark(idLM01, Pt) // use zip to create the LM

 LMsSeq =+  Seq(LM) // ERROR HERE

}

}

I tried to create an initial Point (called LM0 here) and then I tried to iterate but I got an error when trying to append.

Thank you

Assuming you meant += instead of =+, I see a couple of problems here:

LMsSeq += Seq(LM) // ERROR HERE
  1. You’re trying to change an immutable collection. If you want
    mutability (odds are you don’t, but you might), look into
    scala.collection.mutable.Buffer:
> import scala.collection.mutable._
import scala.collection.mutable._

> val buf: Buffer[Int] = new ArrayBuffer
buf: scala.collection.mutable.Buffer[Int] = ArrayBuffer()

> buf
res0: scala.collection.mutable.Buffer[Int] = ArrayBuffer()

> buf += 1
res1: buf.type = ArrayBuffer(1)

> buf += 42
res2: buf.type = ArrayBuffer(1, 42)

> buf += 99
res3: buf.type = ArrayBuffer(1, 42, 99)
  1. You’ve said that LMsSeq is a Seq[Landmark[_3D]], but you’re
    trying to add a Seq[Landmark[_3D]] (presumably, I’m guessing about
    what LM is). If you have a Buffer, you can add single thigs, like
    the above, or you can add a bunch with ++=:
> buf ++= Seq(4,5,6)
res5: buf.type = ArrayBuffer(1, 42, 99, 4, 5, 6)
1 Like

Thank you very much it is working !

because seq is immuatable you need ArrayBuffer