如何在Scala中对数组中的区域进行排序?
我有一个数组,比如var DivA = new Array[Int](100005)
。
我将DivA
中的元素填充到某个小于100005的位置。
例如,我的数组看起来像Diva = {1,2,10,5,15,20}
。
在C ++中我们有sort(DivA, DivA + N)
,但是我们如何才能将Scala中的数组排序到某个索引?
我试过Sorting.quickSort(DivA)
,但我不知道如何定义我要对数组进行排序的索引,以便上面的语句对数组进行排序,数组看起来像{{1} }?
DivA={0,0,0,0,0}
答案 0 :(得分:2)
如果要对数组中的某个区域进行排序,可以使用sort
中的java.util.Arrays
方法:
java.util.Arrays.sort(DivA, 0, 15)
此方法提供fromIndex
和toIndex
。请注意,此方法将就地排序。在你的情况下,这可能是好的,因为你应用的风格似乎是'#34;命令式的"。
如果性能很重要,阵列可能会比其他集合更快。使用数组的其他原因可能是内存消耗或互操作性。
否则,您可以使用惯用的Scala集合以不同的方式设计数据结构/算法(更多"功能")。
答案 1 :(得分:1)
您可以根据需要使用sorted
或sortBy
。如果是简单的Array[Int]
,sorted
就足够了:
val arr = Array.iterate(15, 15)(_ - 1)
arr: Array[Int] = Array(15, 14, 13, 12, 11, 10, 9, 8, 7, 6, 5, 4, 3, 2, 1)
val sortedArray = arr.sorted
sortedArray: Array[Int] = Array(1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15)
如果您想要其他类型的订单,可以提供自己的Ordering
类型类。
您可以在documentation.
中找到它尽管如其他答案中所述,除非您有充分理由切换到Vector
,否则您应该更喜欢不可变Array
。
答案 2 :(得分:1)
sorted()
方法适用于所有集合,Scala中的数组被隐式转换为集合。
因此,您可以在Array[Int]
上调用排序,例如:
scala> val p = (10 to 1 by -1).toArray
p: Array[Int] = Array(10, 9, 8, 7, 6, 5, 4, 3, 2, 1)
scala> p.sorted
res5: Array[Int] = Array(1, 2, 3, 4, 5, 6, 7, 8, 9, 10)
答案 3 :(得分:0)
首先,如果你是在Scala中编程,你应该考虑Vector或List,因为那些是不可变的,这是在Scala中编程的预先方式......
对于Vector和List,有sorted()函数对数组进行排序