在Objective-C中搜索字符串的最快方法是什么?

use*_*895 8 iphone objective-c ios

我正在为iOS应用程序实现一种自动完成功能.我用于自动填充值的数据是一个逗号分隔的文本文件,大约有100,000个字符串.这就是我现在正在做的事情:

  1. 阅读文本文件,并创建NSArray100,000 NSString.
  2. 随着用户类型,做 [array containsObject:text]

当然,有一种更好/更快的方法来执行此查找.有什么想法吗?

das*_*ght 20

绝对有,有!但它不是"在Objective-C中":最有可能的是,你需要自己编写代码.

我们的想法是将您的字符串列表转换为后缀树,这是一种允许您非常快速地按前缀搜索的数据结构.在后缀树中搜索可能的完成非常快,但结构本身不容易构建.在互联网上快速搜索显示,目标C中没有现成的实现,但您可以使用另一种语言移植实现 ,使用C实现,或者如果您没有特别紧迫的时候编写自己的实现.

也许更简单的方法是按字母顺序对字符串进行排序,并对到目前为止输入的前缀运行二进制搜索.虽然效率不如后缀树,但排序数组方法对于100K字符串是可以接受的,因为你可以在17次以下的检查中找到正确的位置.

  • 用于指出Objective-C的+1是C,在查看性能密集型任务时你不应该害怕下降到C :)我还要推出可能最容易实现的二叉树. (2认同)