我正在尝试在scala中实现惯用的就地快速排序。为此,我正在递归视图而不是(左,右)索引对。但是,从一个视角来看,我遇到了一个问题。
Array(1, 2).view => IndexedSeqView[Int, Array[Int]]
Array(1, 2).view.view => IndexedSeqView[Int, IndexedSeqView[Int, Array[Int]]]
等等。这使我无法以递归方式对某些基本数组视图的视图进行分区,因为我的递归函数不知道期望什么类型。有没有办法获取视图,使得IndexedSeqView [Int,Array [Int]]的视图也是IndexedSeqView [Int,Array [Int]]?
答案 0 :(得分:2)
mutable.IndexedSeqView有许多函数可以返回其他视图。对于你的情况,我认为splitAt
就是你想要的。
尝试在IndexedSeqView
中制作完整的scala quicksort交易,然后为排序Array
提供便利包装。
答案 1 :(得分:0)
我能够通过替换
使我的函数在一系列Ints上的任何视图上工作def quickSort(arr: IndexedSeqView[Int, Array[Int])
带
def quickSort(arr: IndexedSeqView[Int, _]).
但我更喜欢功能映射
IndexedSeqView[A, C[A]]
到一些子视图
IndexedSeqView[A, C[A]]
如果存在这样的功能