有没有更好的方法来处理此词典搜索?

| 我正在创建一个iPhone应用程序。我有一个.plist文件,其中包含单词词典(其中约180K)。 用户可以在其中输入一个textField的单词。在他输入时,我使用委托方法
textField:shouldChangeCharactersInRange:replacementString:
确保他只输入abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ。 当用户第一次点击textField时,我将加载一个名为
finalWords
的NSMutableArray(在标头中声明,保留并合成),并带有.plist的内容(每个词都是一个NSString)。当用户输入字母时,我运行
-(void)filterWordsForString:(NSString *)string
{
  NSRange *range;
  for (int i=[finalWords count]-1 ; i >=0 ; i--)
  {
    range = [[finalWords objectAtIndex:i] rangeOfString:string];
    if (range.location == NSNotFound)
    {
      [finalWords removeObjectAtIndex:i];
    }
  }
}
我的目标是在用户输入不属于真实单词的字符串时停止用户(根据我的词典)。该代码在某种意义上起作用,因为它可以减少用户输入时可能键入的单词。这样一来,他只要输入能使它变成单词的字母,便不允许输入该字母。另外,一旦完成了唯一的补全,我便继续用完成的单词填充textField。 问题是,起初这太慢了!第一个字母花费几秒钟,第二个字母花费不多。第三,速度有点合理。有没有办法可以大大加快此筛选过程? 谢谢。     
已邀请:
        您可以在应用程序加载时扫描.plist文件并创建按字母顺序排列的哈希表(哈希是一种将数据压缩为单个值的方式,这样,压缩要放入同一个存储桶中的两个单词将产生相同的值),然后,您甚至可以在搜索前根据前1-3个字母查找正确的存储桶。关于散列(相对于常规搜索)的好处是,您实际上是在形成一个数据数组,其中生成的散列是存储桶的索引。因此,一旦对数据进行哈希处理(这可能是一项昂贵的操作,但仅在加载时执行一次),则查找与在数组中查找数据一样快。 编辑(详细说明): 如果要基于字母组合进行查找,则可以基于重复字母模式创建哈希表。假设创建一个基于\'der \'散列的存储桶,其中将同时包含\'spiderpig \'和\'binder \',那么另一个目录将基于\'spi \'的散列还将包含\'spinach \'和\'spiderpig \'(在这种情况下,spiderpig将位于两个存储桶中)。如果正确实施,则散列速度非常快,这是大多数搜索引擎的原动力(这就是为什么您看到它们在不到一秒钟的时间内返回数​​百万个结果的原因)。     

要回复问题请先登录注册