Slide 31
Slide 31 text
δΣωϦοΫʹ
extension Collection {
func sortedWithIndices(by order: (Element, Element) -> Bool) ->
([Element], moves: [(from: Index, to: Index)]) {
let elementsAndIndices = zip(self, self.indices)
let sorting = elementsAndIndices.sorted { order($0.0, $1.0) }
let elements = sorting.map { $0.0 }
let moves = sorting.enumerated().map {
(offset, element) -> (from: Index, to: Index) in
var toIndex: Index = startIndex
formIndex(&toIndex, offsetBy: offset)
let fromIndex: Index = element.1
return (from: fromIndex, to: toIndex)
}.filter { $0.from != $0.to }
return (elements, moves: moves)
}
}