我正在Swift中实现Merge Sort算法。 以下是我做的功能
func mergeSort(unsortedArray: [Int]) -> [Int] {
guard unsortedArray.count > 1 else { return unsortedArray }
let middleIndex = unsortedArray.count / 2
let leftArray = mergeSort(unsortedArray: unsortedArray[0..<middleIndex])
let rightArray = mergeSort(unsortedArray: unsortedArray[middleIndex..<unsortedArray.count])
return merge(leftPile: leftArray, rightPile: rightArray)
}
在leftArray
和rightArray
声明中,我收到错误消息
Playground execution failed: error: MergeSort.xcplaygroundpage:4:59: error: cannot subscript a value of type '[Int]' with an index of type 'CountableRange<Int>'
let leftArray = mergeSort(unsortedArray: unsortedArray[0..<middleIndex])
^
MergeSort.xcplaygroundpage:4:59: note: overloads for 'subscript' exist with these partially matching parameter lists: (Int), (Range<Int>), (Range<Self.Index>), (ClosedRange<Self.Index>), (CountableClosedRange<Self.Index>)
let leftArray = mergeSort(unsortedArray: unsortedArray[0..<middleIndex])
有人能解释一下这个问题吗?答案键说我应该按照以下方式实现,但我不确定为什么要在数组中包装数组。
let leftArray = mergeSort(unsortedArray: Array(unsortedArray[0..<middleIndex]))
let rightArray = mergeSort(unsortedArray: Array(unsortedArray[middleIndex..<unsortedArray.count]))
答案 0 :(得分:2)
你不在数组中包装数组。你正在强迫不一个数组进入一个数组。 unsortedArray[0..<middleIndex]
不是数组。它是一个ArraySlice,它不是一回事。这里需要一个数组,因此你将ArraySlice强制转换为数组。