Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/ios/121.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Ios 二进制搜索NSArray,没有要搜索的对象,但有一个条件_Ios_Objective C_Cocoa Touch_Nsarray_Binary Search - Fatal编程技术网

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你在这两方面都是对的,谢谢你的更正!