【问题标题】:ios : Find a word in a (huge) dictionary/arrayios:在(巨大的)字典/数组中查找一个单词
【发布时间】:2014-10-19 22:45:27
【问题描述】:

我正在尝试解决我尚未构建的问题,所以我可能会采取错误的方式。如果您碰巧知道其他可能性,我愿意接受。

所以,我想简单地检查一个字符串是否完全存在于预先制作的字符串列表中。这个列表可能是一个数组或一个字典,我不确定什么是最好的。

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

我有两个“解决方案”:

解决方案 1:

该数组/字典将包含大约 70.000 个单词,按字母顺序排序。 我从头到尾浏览数组,直到找到我的匹配项。

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

解决方案 2:

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

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

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

注意:我对此的代码为零,我仍然在应用程序的纸面/理论方面,只有伪代码和少量图纸。

【问题讨论】:

  • 我认为如果数组是有序的,最快的方法是进行二进制搜索。你会找到很多文档,但如果你没有得到它,我会帮助你
  • 哈希图可以让你“即时”访问给定的数据,尤其是当它们是字符串时。所以 +1 @Fogmeister 回答。
  • 基本上,您想对排序列表、哈希表(例如 NSDictionary/NSSet)、基数树使用二进制搜索,或者只是将所有内容放入数据库中,让数据库软件处理搜索。
  • @Zil 我的回答有用吗?如果是这样,请记住投票并接受它。否则,让我知道什么不起作用,我会尝试修复它。

标签: ios arrays string dictionary


【解决方案1】:

编辑

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

应该(但我找不到文档)也提供了 O(1) 的搜索性能,并且没有字典中“值”的冗余。

原答案

嗯...如果您像这样使用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];

【讨论】:

  • 作为一个微小的改进,没有真正需要添加字典项的 BOOL 值 prt - 只需找到键就足以说明单词在字典中。可以改用 [NSNULL null]。我怀疑它会节省任何记忆,但对我来说似乎在语义上更好。 OP - 70K 字也很小。
  • 可以使用 NSSet -- 基本上是字典,但没有关联值。
  • @Greycon 好的,感谢您提供的信息。将更新问题(删除最后一位)。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2019-06-23
  • 2017-10-10
  • 1970-01-01
  • 1970-01-01
  • 2011-02-07
  • 1970-01-01
  • 2013-04-08
相关资源
最近更新 更多