Trying to extend Array type to use binary sorting to insert elements in order. Here's my playground code:
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)
}
}
I get a compiler error: "cannot invoke insertionIndexOf with argument list of type ( T , isOrderedBefore: (_, _) -> _) "
The curious thing is, if I use instead:
mutating func insertOrdered(elem: T){
let index = self.insertionIndexOf(elem, isOrderedBefore: { (a , b) in return false } )
return insert(elem, atIndex: index)
}
The compiler calms down but the array insertion will not be ordered, :( of course. Please any ideas?? Thank you.
(using Xcode 6.3 beta 2 - Swift 1.2)