2017-11-26 3 views
0

Was ist der beste Weg, um einen bestimmten Index einer Liste in scala hinzuzufügen? DieseElement zum spezifischen Index der Liste hinzufügen

ist, was ich habe versucht:

case class Level(price: Double) 

case class Order(levels: Seq[Level] = Seq()) 

def process(order: Order) { 
    orderBook.levels.updated(0, Level(0.0)) 
} 

ich hoffte, in der richtigen Position einzufügen Null die neuen Level aber es wirft nur java.lang.IndexOutOfBoundsException: 0. Was ist der beste Weg, um damit umzugehen? Gibt es einen besseren Datentyp als Seq, der verwendet werden sollte, um Indizes in einer Liste zu verfolgen?

+0

https://stackoverflow.com/questions/31037384/scala-insert-a-new-element-in-a-specified- Position der Liste – jrook

Antwort

2

Gibt es einen besseren Datentyp als Seq, der für verwendet werden sollte, um Indizes in einer Liste zu verfolgen?

Ja, ein Vector[T] wird empfohlen, wenn Sie Direktzugriff in die darunter liegende Sammlung wollen:

scala> val vector = Vector(1,2,3) 
vector: scala.collection.immutable.Vector[Int] = Vector(1, 2, 3) 

scala> vector.updated(0, 5) 
res3: scala.collection.immutable.Vector[Int] = Vector(5, 2, 3) 

Beachten Sie, dass ein Vector wird auch durch eine IndexOutOfBoundsException, wenn Sie versuchen, Daten in einen leeren Vektor einzufügen. Eine gute Möglichkeit des Anhängens und Voranstellen von Daten unter Verwendung von :+ und :+ jeweils:

+0

Danke! Wie überschreiben Sie mit dem neu aktualisierten Vektor den in "Order" gespeicherten? Wie wäre es, wenn Sie den Vector einfügen (nicht aktualisieren) möchten? – maloney

+0

@maloney Sie können ein 'var vector'-Feld verwenden und es fortlaufend aktualisieren. Oder Sie können eine andere veränderbare Sammlung nach Bedarf auswählen. Einfügen ist wie ich gezeigt habe mit ': +' und '+:'. –

Verwandte Themen