ios - 没有要搜索的对象但有条件的二进制搜索 NSArray

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

所以,我有这个包含 NSNumber 的对象数组。我有自己的数字,我需要在数组中找到一个比我的数字大一点的数字。

如何为此使用二进制搜索?

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

最佳答案

您需要提供一个对象 - 指定要搜索的项目的值的任何对象。只要比较器知道如何提取值,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]
    }];

关于ios - 没有要搜索的对象但有条件的二进制搜索 NSArray,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21723915/

相关文章:

ios - 如何在 objective c 的 firebase 中实现打字指示器?

ios - 隐藏一个 View 并在触摸按钮时取消隐藏另一个 View

ios - UIImage 与 NSData - 图像压缩依赖

ios - 对 didselectrowatindexpath 的按钮操作

iOS保存标签数据

ios - UISegmentedControl TableView 重新排序

ios - nib 项目中的 CellForRowAtIndexPath

ios - 为什么当我将 UILabel 移动到某个点时,它会在我进入全屏模式时移动?

ios - 在 CosmicMind/Material SnackbarController 中,如何启动(显示) snackbar ?

ios - 我如何在 iOS 7 中使用 Mandrill 向我的 Parse 支持的应用程序管理员发送一封简单的电子邮件?