ios:在(巨大的)字典/数组中查找单词

时间:2014-08-26 14:42:49

标签: ios arrays string dictionary

我试图解决我尚未构建的问题,所以我可能会采取错误的方式。如果你碰巧知道其他可能性,我会对其他可能性持开放态度。

因此,我想简单地检查字符串中是否存在完全存在的字符串。这个列表可能是一个数组或字典,我不知道什么是最好的。

我想要做的是找到一种快速/最佳的方式来浏览该数组并查找我的单词是否存在。我在考虑二分法搜索,但我不确定。

我有两个"解决方案" :

解决方案1:

该数组/字典将包含大约70.000个单词,按字母顺序排序。 我从头到尾浏览阵列,直到我到达我的比赛。

这可能会非常慢,特别是如果我的单词以Z开头。

解决方案2:

我有一个数组allTheWords,其中包含27个阵列" A"," B"," C"等等。 每个数组都包含以该字母开头的每个单词。

我检查我给定字符串的第一个字母,然后从头到尾浏览我的数组,直到我到达我的匹配。 这比解决方案1要快得多,所以,我觉得我领先一步,但它仍然不是最优的。

这可行吗?你知道更好的事吗?我在正确的道路上吗?

注意:我没有关于此的代码,我仍然在应用程序的论文/理论方面,只有伪代码和小图纸。

1 个答案:

答案 0 :(得分:1)

修改

事实上,您可能只使用NSSet。我相信它使用类似的搜索NSDictionary来保持唯一性。所以你可以使用方法[wordSet containsObject:theSearchWord];

(但我无法找到文档)也会提供O(1)搜索效果,并且没有"值&#的冗余34;在字典里。

原始回答

嗯......如果你像这样使用NSDictionary ......

{
    <THE WORD>: <BOOL>
}

@{
    @"Apple": @YES,
    @"Banana": @YES,
    @"Orange": @YES
}

然后你可以这样做......

NSNumber *wordValue = wordDictionary[@"Apple"];

然后wordValue将为@YESnil

此搜索时间为O(1)

如果要列出单词,可以使用类方法...

[wordDictionary enumerateObjectsAndKeys...

或者你可以获得NSArray个单词......

NSArray *justTheWords = [wordDictionary allKeys];