将元素添加到列表的特定索引

时间:2017-11-26 11:44:29

标签: scala list

在scala中添加到列表的特定索引的最佳方法是什么?

这就是我的尝试:

case class Level(price: Double) 

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

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

我希望将新Level插入零位置,但它只会抛出java.lang.IndexOutOfBoundsException: 0。处理这个问题的最佳方法是什么?除Seq之外是否有更好的数据类型用于跟踪列表中的索引?

1 个答案:

答案 0 :(得分:2)

  

除Seq之外是否有更好的数据类型应该用于   跟踪列表中的索引?

是的,当您想要随机访问基础集合时,建议使用Vector[T]

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)

请注意,当您尝试将数据插入空向量时,Vector也将通过IndexOutOfBoundsException。附加和预先添加数据的好方法分别是:+:+

scala> val vec = Vector[Int]()
vec: scala.collection.immutable.Vector[Int] = Vector()

scala> vec :+ 1 :+ 2
res7: scala.collection.immutable.Vector[Int] = Vector(1, 2)