Cố gắng mở rộng loại mảng để sử dụng phân loại nhị phân để chèn các phần tử theo thứ tự. Đây là mã sân chơi của tôi:Mở rộng Swift Array đơn giản
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)
}
}
tôi nhận được một lỗi biên dịch: "Không thể gọi insertionIndexOf với danh sách đối số kiểu (T, isOrderedBefore: (_, _) -> _)"
điều kỳ lạ là, nếu tôi sử dụng thay vì:.
mutating func insertOrdered(elem: T){
let index = self.insertionIndexOf(elem, isOrderedBefore: { (a , b) in return false })
return insert(elem, atIndex: index)
}
trình biên dịch bình tĩnh lại nhưng chèn mảng sẽ không được ra lệnh, :(dĩ nhiên Xin vui lòng bất kỳ ý tưởng ?? Cảm ơn bạn.
(sử dụng Xcode 6.3 beta 2 - Swift 1.2)
Mã đó trông quen thuộc http://stackoverflow.com/a/26679191/1187415 :) - Lưu ý rằng 'return 0' cuối cùng phải là' return lo'. –
@MartinR Có :) Tôi đã sử dụng ví dụ của bạn cho tìm kiếm nhị phân để thêm ngữ cảnh vào vấn đề của tôi. Tôi đã chơi xung quanh với phần mở rộng một chút. Rất tiếc, bạn chỉ quên bỏ liên kết tới mã của mình. Hy vọng không có hại gì. –
@MartinR http://stackoverflow.com/questions/29107928/swift-map-extension-for-set –