Objective c 模糊字典-使用最近键
我有一个大约4000个数字的列表,例如:Objective c 模糊字典-使用最近键,objective-c,nsdictionary,Objective C,Nsdictionary,我有一个大约4000个数字的列表,例如:{10,20,30,40,50,} 每个数字都是NSDictionary中的一个键,因此我可以获取与数字关联的对象,例如 [NSDictionary objectForKey:[NSNumber numberWithInt:20]; 但是,如果该键不在字典中,我希望找到最近的键(假设值之间存在有意义的关系,在我的示例中为10>20>30等) 例如 [NSDictionary objectForKey:[NSNumberWithInt:19]] would
{10,20,30,40,50,}
每个数字都是NSDictionary
中的一个键,因此我可以获取与数字关联的对象,例如
[NSDictionary objectForKey:[NSNumber numberWithInt:20];
但是,如果该键不在字典中,我希望找到最近的键(假设值之间存在有意义的关系,在我的示例中为10>20>30等)
例如
[NSDictionary objectForKey:[NSNumberWithInt:19]] would return the value for key:20.
或者是否有其他更适合这样做的数据结构?我曾想过使用排序的NSArray,其中键是数组索引,然后如果对象为null,则继续递增数组指针,直到找到该对象为止,但是这将导致一个包含999999个元素的稀疏数组:)
谢谢假设您的数字列表是按升序排列的,您可以在数组中进行二进制搜索。 因此,在查找键x时,您可以从index array.length/2开始,将该位置的键与x进行比较,如果大于x,则继续使用左侧部分,如果小于x,则继续使用右侧部分。继续,直到找到离x最近的关键点
这非常快(在您的情况下是日志(4000)~12个数组查找),并且不需要额外的存储。基本上,您需要保留一个键的排序列表(NSMutableArray)。要查找键,请使用NSArray传入
NSBinarySearchingInsertionIndex
的IndexOfoObject:InsertedRange:options:usingComparator:
方法作为选项,该选项将执行二进制搜索,即使找不到确切的元素,也会为您提供索引。你必须自己取两个钥匙并比较它们