所以,我有这个带有NSNumber
s的对象数组。我有一些我自己的,我需要在数组中找到一个比我的数字最小的数字。
如何使用二进制搜索?
方法:indexOfObject:inSortedRange:options:usingComparator
接受对象作为参数,但我没有。如何使用此条件进行二分查找,但没有对象?
答案 0 :(得分:2)
您需要提供一个对象 - 指定要搜索的项的值的任何对象。只要比较器知道如何提取值,indexOfObject:inSortedRange:options:usingComparator:
就会返回一个合适的值。
您需要指定NSBinarySearchingInsertionIndex
选项,以使搜索返回第一项的位置,该位置大于您的目标值的最小金额,即新值的插入索引。
NSNumber *target = ... // Your target number
int index = [sortedArray indexOfObject:target
inSortedRange:NSMakeRange(0, sortedArray.count)
options:NSBinarySearchingInsertionIndex
usingComparator:^(id lhs, id rhs) {
return [lhs compare:rhs]
}];