【发布时间】:2015-07-16 17:01:07
【问题描述】:
我对 Swift 和一般的 Apple 编程非常陌生。我写这段代码是为了进行二分搜索。
func binarySearch<X:Comparable> (needle:X, haystack:[X])->X? {
if haystack.isEmpty { return nil }
let mid = haystack.count / 2
let found = haystack[mid]
if found == needle {
return needle
}
else if found < needle {
return binarySearch(needle, haystack[0..<mid])
}
else {
return binarySearch(needle, haystack[mid+1..<haystack.count])
}
}
我在递归调用中遇到语法错误,因为第二个参数的类型是 ArraySlice<X> 而不是 Array<X>。
我通过使用相同的版本重载 binarySearch 来解决这个问题,除了第二个参数的类型是 ArraySlice<X>。
我认为如果这一切都可以在一个函数中完成会更优雅。有没有合适的类型可以统一 Array 和 ArraySlice?我尝试使用ArrayLiteralConvertible<X>,但由于某种原因没有计数成员。我仍然很难在文档中找到自己的方式,所以我很容易忽略了更好的选择。
你能提出一个好的方法吗?如果它涉及使用内置类,您能否给我一个提示,告诉我下次如何自己找到它,而不是写信给 SO?
【问题讨论】: