Próba rozszerzenia typu Array w celu użycia sortowania binarnego do wstawiania elementów w kolejności. Oto mój kod zabaw:Rozszerzenie Simple Swift Array
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)
}
}
otrzymuję błąd kompilatora: "nie można powoływać się insertionIndexOf z listy argumentów typu (T, isOrderedBefore: (_, _) -> _)"
Ciekawą rzeczą jest, jeśli mogę użyć zamiast.
mutating func insertOrdered(elem: T){
let index = self.insertionIndexOf(elem, isOrderedBefore: { (a , b) in return false })
return insert(elem, atIndex: index)
}
kompilator uspokaja jednak wstawiania tablica nie zostanie uporządkowane, :(oczywiście Proszę wszelkie pomysły? Dziękuję Ci.
(używając Xcode 6.3 beta 2 - Swift 1.2)
Ten kod wygląda znajomo. Http://stackoverflow.com/a/26679191/1187415 :) - Zwróć uwagę, że ostatnim 'return 0' powinno być' return lo'. –
@MartinR Tak :) Użyłem twojego przykładu do binarnego wyszukiwania, aby dodać kontekst do mojego problemu. Gram trochę z rozszerzeniem. Przepraszam, zapomniałem porzucić link do twojego kodu. Nadzieja, że nic się nie stało. –
@MartinR http://stackoverflow.com/questions/29107928/swift-map-extension-for-set –