Вы могли бы пройти в sorted
не набор элементов, а индексы элементов:
let a = ["hello","i","must","be","going"]
let idxs = sorted(indices(a)) { a[$0] < a[$1] }
// produces [3, 4, 0, 1, 2]
Или, если вам не нравится, захватив a
и хотел элементы сами прошли в крышку, вы может пройти в последовательности пар индекса и элемент, например, так:
let pairs = sorted(Zip2(indices(a),a)) {
$0.1 < $1.1
}
Примечания результат будет массивом (index,element)
пара: [(3, be), (4, going), (0, hello), (1, i), (2, must)]
. Если вы хотите, чтобы превратить это обратно в только элементы, вы можете сделать map(pairs) { $0.1 }
Кроме того, если взять только что индексы маршрута и хотите, чтобы превратить это обратно в элементы позже, вы можете сделать это с PermutationGenerator
:
let values = PermutationGenerator(elements: a, indices: idxs)
println(" ".join(values)) // prints "be going hello i must"
Спасибо, связка. Может быть, я догадался, что это так тривиально. Но, возможно, нет ;-) –
Начиная с Xcode 7.3, PermutationGenerator отмечен как устаревший: * «PermitationGenerator будет удален в Swift 3» * (и опечатка не моя :) –
Также упоминается здесь: https://github.com /apple/swift-evolution/blob/master/proposals/0006-apply-api-guidelines-to-the-standard-library.md: * "PermutationGenerator удален." * - Вы знаете, есть ли какая-то замена? –