Swift数组中的下标错误

时间:2017-08-19 20:09:08

标签: arrays swift

我正在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)
}

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

1 个答案:

答案 0 :(得分:2)

在数组中包装数组。你正在强迫一个数组进入一个数组。 unsortedArray[0..<middleIndex]不是数组。它是一个ArraySlice,它不是一回事。这里需要一个数组,因此你将ArraySlice强制转换为数组。