Swift Array 中的下标错误



我正在 Swift 中实现合并排序算法。 以下是我制作的功能

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)
}

leftArrayrightArray声明中,我收到一个错误,说:

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]))

没有将数组包装在数组中。您正在将不是数组的东西强制到数组中unsortedArray[0..<middleIndex]不是数组。它是一个ArraySlice,这不是一回事。这里需要一个数组,所以你强制将 ArraySlice 强制到一个数组。

最新更新