二进制搜索NSArray而没有搜索对象但是条件

时间:2014-02-12 09:37:29

标签: ios objective-c cocoa-touch nsarray binary-search

所以,我有这个带有NSNumber s的对象数组。我有一些我自己的,我需要在数组中找到一个比我的数字最小的数字。

如何使用二进制搜索?

方法:indexOfObject:inSortedRange:options:usingComparator接受对象作为参数,但我没有。如何使用此条件进行二分查找,但没有对象?

1 个答案:

答案 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]
    }];