这更像是使用Core Data的一般设计查询,以及如何设计它以使其高效。
我的应用程序是一个文字游戏,带有一个sqlite3数据库,其中包含2到28个字母单词的单词字典。数据库包含单词和单词大小的列。
我想得到的结果(以及我想设计的查询)是获取每个大小的10个随机单词,即10个随机2个字母单词,10个随机3个字母单词,依此类推。
此外,我正在尝试在我的应用程序加载时在AppDelegate中执行此操作。
我想过几个方面,但真的需要你的意见:
获取特定大小的所有字母,然后在结果中获取随机记录。这意味着每个字长有多次提取,并存储大量数据。
使用索引上的偏移量获取随机单词,即0 - 20 = 2个字母单词,21 - 972 = 3个字母单词
根据随机索引随机抽取500条记录,并希望每条长度至少包含10个单词。
我不确定如何有效地设计查询。我试图坚持单次获取的规则,并尽可能地对数据进行排序。
提前致谢。 PRAS。
答案 0 :(得分:0)
我想我通过一些测试找到了自己的答案。
方法(1)显然是一种简单的方法,但是对于获取和存储大量数据而言,资源过于密集。
方法(3)真是太傻了。
所以我选择了方法(2)和一些新获得的核心数据技能。
方法如下:
虽然不是完全随机的,但上面的方法是快速,并从随机偏移返回10个连续值,并将其存储到NSMutableArray。
更新:实际代码和详细说明可以在我的教程页面找到:http://prasannaellanti.com/tutorials/
欢迎任何其他建议。 PRAS。
答案 1 :(得分:0)
如果您的词典是相对静态的,请预先计算各种长度的单词数。为每个单词保留一个自定义ID字段,将其标识为长度为L的单词的实例I.例如,单词“foo”可以是长度为3的单词的实例638,“fop”为639等等。
从这些范围生成随机索引(只是随机样本而不替换给定L的1和I [max]之间的数字),将它们放入NSSet并使用该集合应用谓词。
这样,您不会检索所有对象,而只检索一个子集,并且只需一次提取。费用是修改你的字典以保存预先计算的索引,并且你想要在某处跟踪Imaxes,但是如果你的字典没有太大变化,那么你只需要做一次索引(并且添加后续的单词应该是更便宜)。