这是一个非常直接的问题:在本地搜索 200-300 个字符串的数组需要多长时间?远程呢?
4 回答
如果您正在搜索字母字符串,并且搜索时间过长,您可以尝试将字符串列表转换为 DAWG(有向无环词图,易于 google)。我这样做了一个很长的列表(大约 170,000 字),并获得了 18,000 的改进率。
乔丹纳
搜索?凭什么?
如果您只是在运行:
[myStringArray containsObject:searchString];
然后可以在几微秒内搜索 200-300 个字符串。
如果您正在搜索:
BOOL found = NO
for (NSString *string in myStringArray)
{
if ([string rangeOfString:searchString].location != NSNotFound)
{
found = YES;
break;
}
}
然后它几乎完全取决于每个字符串的长度,但对于少于几十个字符的字符串,它与之前的搜索速度大致相同。
远程搜索完全不同——但是对于这样的操作来说是一种巨大的时间浪费。它完全基于网络延迟。按平均 250 毫秒 ping 计算,远程操作的平均时间约为半秒或更长,因为生成网络数据包、通过网络发送、等待远程服务器接收、等待远程服务器需要很长时间服务器处理,等待响应并解析响应。
如果这个问题是一种迂回的提问方式:我是否应该只获取所有 30 个字符串并在本地搜索 - 那么:是的,在本地搜索。通常:本地搜索会更快,直到下载所有结果所需的时间成为负担(超过 3G,我通常认为快速透明下载的最大值约为 50kB)。
微秒。它非常快。当我发现这一点时,我也很惊讶:p
这是关于本地字符串搜索的。
我已经实现了 Trie 数据结构来索引字符串以实现快速自动完成。 http://en.wikipedia.org/wiki/Trie