在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
之外是否有更好的数据类型用于跟踪列表中的索引?
答案 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)