Trying to expand an array type to use binary sorting to insert elements in order. Here is 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 call insertionIndexOf with argument list type (T, isOrderedBefore: (_, _) β _)"
Curious 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 is reassuring, but the insertion of the array will not be ordered: (of course. Please, any ideas? Thanks.
(using Xcode 6.3 beta 2 - Swift 1.2)
source share