Рекурсивный анализ массива в Swift 4 - PullRequest
0 голосов
/ 29 июня 2018

Я пытаюсь реализовать быструю сортировку в Swift, и возникают проблемы с рекурсивным анализом массива в функцию quick_sort. Я получаю сообщение об ошибке:

error: ambiguous subscript with base type '[String]' and index type 'CountableRange<Int>'

Функция:

func quick_sort(_ array: inout [String]) {
    if array.count > 0 {
        let pivot = array[0]
        var (left, right) = partition(&array, pivot)
        quick_sort(&array[0..<left])
    }
}

Ошибка происходит на линии quick_sort(&array[0..<left]).
Возможно, это связано с тем, что он может быть ArraySlice?

1 Ответ

0 голосов
/ 29 июня 2018

Когда вы нарезаете Array, вы получаете ArraySlice. Когда вы нарезаете ArraySlice, вы получаете еще ArraySlice. Это свойство, T.SubSequence == T, жизненно важно для создания рекурсивного алгоритма, подобного этому, так что вам нужно работать только с одним типом.

Вам необходимо, чтобы ваша рекурсивная функция работала с ArraySlice, но вы можете сделать функцию-обертку, которая принимает массив и выполняет необходимое преобразование.

func quickSort(_ array: inout [String]) {
    func quickSort(_ slice: inout ArraySlice<String>) {
        if let first = slice.first {
            var (left, right) = partition(&slice, pivot)
            quickSort(&slice[0..<left]) // This part of the algorithm will break...
        }
    }

    quickSort(ArraySlice(array))
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...