Ios 二进制搜索NSArray,没有要搜索的对象,但有一个条件
因此,我有一个对象数组,其中包含Ios 二进制搜索NSArray,没有要搜索的对象,但有一个条件,ios,objective-c,cocoa-touch,nsarray,binary-search,Ios,Objective C,Cocoa Touch,Nsarray,Binary Search,因此,我有一个对象数组,其中包含NSNumbers。我有一个自己的数字,我需要在数组中找到一个比我的数字大至少一倍的数字 我如何使用二进制搜索来实现这一点 方法:indexOfObject:insertedrange:options:usingComparator接受对象作为参数,而我没有它。如何在没有对象的情况下使用此条件进行二进制搜索?您需要提供一个对象-指定要搜索项目值的任何对象。只要比较器知道如何提取值,indexOfObject:insertedrange:options:usingC
NSNumber
s。我有一个自己的数字,我需要在数组中找到一个比我的数字大至少一倍的数字
我如何使用二进制搜索来实现这一点
方法:
indexOfObject:insertedrange:options:usingComparator
接受对象作为参数,而我没有它。如何在没有对象的情况下使用此条件进行二进制搜索?您需要提供一个对象-指定要搜索项目值的任何对象。只要比较器知道如何提取值,indexOfObject:insertedrange: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]
}];
为什么不在比较器块中简单地
返回[lhs compare:rhs]
?你的意思可能是indexOfObject:target
@MartinR你在这两方面都是对的,谢谢你的更正!