代码之家  ›  专栏  ›  技术社区  ›  maloney

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

  •  0
  • maloney  · 技术社区  · 7 年前

    在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 回复  |  直到 7 年前
        1
  •  2
  •   Yuval Itzchakov    7 年前

    除了Seq之外,还有更好的数据类型可以用于 跟踪列表中的索引?

    是的,a 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)