模糊NSDictionary - 使用最近的密钥

Dav*_*ave 3 objective-c nsdictionary

我有一个大约4000个数字的列表,例如: {10, 20, 30, 40, 50,...}

每个数字都是一个键NSDictionary,所以我可以获取与数字相关联的对象,例如

[NSDictionary objectForKey:[NSNumber numberWithInt:20];
Run Code Online (Sandbox Code Playgroud)

然而如果该键是不在字典中,我想找到最近的密钥(假设有值之间的有意义的关系,在我的例如10> 20> 30等).

所以,例如

[NSDictionary objectForKey:[NSNumberWithInt:19]] would return the value for key:20.
Run Code Online (Sandbox Code Playgroud)

或者是否有另一种数据结构更适合这样做?我想过使用一个排序的NSArray,其中键是数组索引,然后如果object为null,则继续递增数组指针直到找到该对象,但是这会导致一个包含999,999个元素的稀疏填充数组:)

谢谢

bra*_*ain 5

基本上你需要保持键的排序列表(NSMutableArray).要查找密钥,请使用indexOfObject:inSortedRange:options:usingComparator:NSArray传入的方法NSBinarySearchingInsertionIndex作为将执行二进制搜索的选项,即使它找不到确切的元素也会为您提供索引.您必须自己获取两个密钥并进行比较.