我有很多指数。
有一个特定的组对应于一系列索引
例如:
Range Group
0-100 A
101-220 B
221-543 C
... ...
3K-40K DF
在给定特定索引的情况下,我需要一种方法来查找相应的组。 例如,我需要一个方法:
(Group)groupForIndex:(index)
因此,如果我致电groupForIndex:(115)
,结果将为B
我正在寻找一种方法来改善我现在拥有的东西。
我不会只使用NSDictionary
(或地图),因为那将是每个id的条目,可能是数百万,并且会浪费空间,因为许多键具有相同的值
我决定使用数组和字典的组合。 对于每个“上限”,数组中将有一个条目
示例:
[0] = 100
[1] = 220
[2] = 543
对于每个上限,字典中都会有一个条目
Key Value
100 A
220 B
543 C
这样,使用二进制搜索,给定索引我可以查找上限。一旦我有了上限,我就拥有了字典的密钥。
这是我能提出的最有效的查找方案。什么是更有效的方法呢?
答案 0 :(得分:1)
在(有序)数组中进行二进制搜索非常快,所以如果组和索引是固定的,那么你的方法看起来不错,所以数组必须只构建一次(或者不经常,与查找次数相比) )。
如果组经常更改,则使用不同的数据结构(例如,一些 树)可能更适合而不是在每次更改时重建数组。
正如我在评论中所说,我会用另一个数组替换字典 (与第一个相同的大小)
[0] = "A"
[1] = "B"
[2] = "C"
...
然后只将第一个数组中找到的索引映射到相应的组 通过第二个阵列。
这可能稍微快一点,并且可能更容易维护,因为每组的“上限”不会存储在两个地方。