Der Versuch, den Array-Typ zu erweitern, um die binäre Sortierung zum Einfügen von Elementen in der richtigen Reihenfolge zu verwenden. Hier ist mein Spielplatz Code:Einfache Swift-Array-Erweiterung
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)
}
}
ich einen Compiler-Fehler: "kann nicht insertionIndexOf mit Argumentliste vom Typ (T, isOrderedBefore: (_, _) -> _) aufrufen"
das merkwürdige ist, wenn ich stattdessen verwenden.
mutating func insertOrdered(elem: T){
let index = self.insertionIndexOf(elem, isOrderedBefore: { (a , b) in return false })
return insert(elem, atIndex: index)
}
der Compiler beruhigt sich aber das Array Insertion nicht bestellt werden, :(natürlich Bitte irgendwelche Ideen ?? Vielen Dank.
(unter Verwendung von Xcode 6.3 beta 2 - Swift 1.2)
Dieser Code kommt mir bekannt http://Stackoverflow.com/a/26679191/1187415 :) - Beachten Sie, dass die endgültige 'return 0'' return lo' sein sollte. –
@MartinR Ja :) Ich habe Ihr Beispiel für eine binäre Suche verwendet, um Kontext zu meinem Problem hinzuzufügen. Ich habe ein bisschen mit Erweiterung gespielt. Entschuldigung, vergessen Sie einfach, einen Link zu Ihrem Code zu löschen. Hoffe, kein Schaden angerichtet. –
@MartinR http://stackoverflow.com/questions/29107928/swift-map-extension-for-set –