Scala数组视图'flatmap'

时间:2013-08-12 15:13:31

标签: scala

我正在尝试在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]]?

2 个答案:

答案 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]]

如果存在这样的功能