在Scala中将元素插入有序数组的最佳方法

lse*_*ohn 0 arrays sorting scala

我有一个数组,或者Seq看起来像

val myArray = collection.mutable.ArrayBuffer[Int](1,4,8,10,12,13)

val newElem = 7
Run Code Online (Sandbox Code Playgroud)

我想将新元素插入到Array中的正确位置,以便仍然对数组进行排序。

我不想在这里生成一个新数组。

我的解决方案是先找到插入位置,然后再插入。

def findInsertPosition(myArray: collection.multable.ArrayBuffer[Int], newElem: Int): Int
Run Code Online (Sandbox Code Playgroud)

然后打电话

myArray.insert(pos, newElem)
Run Code Online (Sandbox Code Playgroud)

问题是如何以findInsertPositionScala样式编写函数,而不使用while,for循环?

还是您有更好的解决方案?

Bri*_*ian 5

找到的插入位置,lastIndexWhere然后insert在该位置添加一个。

scala> val xs = scala.collection.mutable.ArrayBuffer(1,4,8,10,12,13)
xs: scala.collection.mutable.ArrayBuffer[Int] = ArrayBuffer(1, 4, 8, 10, 12, 13)

scala> xs.insert(xs.lastIndexWhere(_ < 7) + 1, 7)

scala> xs
res10: scala.collection.mutable.ArrayBuffer[Int] = ArrayBuffer(1, 4, 7, 8, 10, 12, 13)
Run Code Online (Sandbox Code Playgroud)