1
我对CFArray进行了排序,我需要找到一个值的索引。但我也不确定这个值是否在这个数组中,所以我也需要知道这个。在CFArray中优化搜索
现在我用这个代码:
NSInteger valueIndex;
BOOL valueExactMatch = CFArrayContainsValue((CFArrayRef)sortedBorders, arrayRange, value);
if (valueExactMatch)
valueIndex = CFArrayGetFirstIndexOfValue((CFArrayRef)sortedBorders, arrayRange, value);
else
valueIndex = CFArrayBSearchValues((CFArrayRef)sortedBorders, arrayRange, value, (CFComparatorFunction) CFDateCompare, nil);
但据我了解,valueExactMatch被计算两次 - 一次在CFArrayContainsValue,一旦执行实际的搜索。
我可以使用现有的CFArray实现对其进行优化吗?
它不执行两个完整的二进制搜索吗?它似乎应该更慢,不是吗? –
在您的代码中,您正在搜索数组一次以获取valueExactMatch,然后再次使用'CFArrayGetFirstIndexOfValue'或'CFArrayBSearchValues'获取索引。在我的代码中,我搜索了一次索引,如果找到了,就完成了。它只会再次搜索是否不匹配。 – highlycaffeinated
错了。谢谢 –