Provare ad estendere il tipo di array per utilizzare l'ordinamento binario per inserire gli elementi nell'ordine. Ecco il mio codice parco giochi:Estensione di Swift Array semplice
extension Array {
func insertionIndexOf(elem: T , isOrderedBefore: (T, T) -> Bool) -> Int {
var lo = 0
var hi = self.count - 1
while lo <= hi {
let mid = (lo + hi)/2
if isOrderedBefore(self[mid], elem) {
lo = mid + 1
} else if isOrderedBefore(elem, self[mid]) {
hi = mid - 1
} else {
return mid
}
}
return 0
}
mutating func insertOrdered(elem: T){
let index = self.insertionIndexOf(elem, isOrderedBefore: { (a , b) in return (a > b) })
return insert(elem, atIndex: index)
}
}
ottengo un errore di compilazione: "non può invocare l'insertionIndexOf con lista di argomenti di tipo (T, isOrderedBefore: (_, _) -> _)"
la cosa curiosa è, se uso invece:.
mutating func insertOrdered(elem: T){
let index = self.insertionIndexOf(elem, isOrderedBefore: { (a , b) in return false })
return insert(elem, atIndex: index)
}
il compilatore si calma ma l'inserimento matrice non verrà ordinato, :(naturalmente Per favore qualche idea ?? Grazie.
(usando Xcode 6.3 beta 2 - Swift 1.2)
Quel codice sembra familiare http://stackoverflow.com/a/26679191/1187415 :) - Si noti che l'ultimo 'return 0' dovrebbe essere' return lo'. –
@MartinR Sì :) Ho usato il tuo esempio per una ricerca binaria per aggiungere il contesto al mio problema. Ho giocato un po 'con l'estensione. Siamo spiacenti, ho appena dimenticato di inserire un link al tuo codice. Spero che nessun danno sia fatto. –
@MartinR http://stackoverflow.com/questions/29107928/swift-map-extension-for-set –