2017-08-19 6 views
-2

私はSwiftでマージソートアルゴリズムを実装中です。以下は 私はleftArrayrightArray宣言でスウィフトアレイの添字エラー

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

を作った機能ですが、私はエラーを取得すると言って、

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

答えて

2

あなたは、ArrayのArrayをラップないです。あなたはではないの配列をの配列に強制しています。 unsortedArray[0..<middleIndex]は配列ではありません。これはArraySliceで、これは同じものではありません。ここにはArrayが必要なので、ArraySliceをArrayに強制します。

+0

だから、彼は 'Array(unsortedArray [0 ..

+1

'unsortedArray [0 .. matt

+0

@OrkhanAlikhanov彼は "答えの鍵"を見ているので、彼はすることができます。彼の唯一の疑問は_why_と思われる。それは私が答えている質問です。 – matt

関連する問題