这是一个带有Core数据的通用设计查询,以及如何设计它以提高效率。
我的应用程序是一个单词游戏,有一个sqlite3数据库,其中包含一个从2-28个字母单词组成的字典。数据库中包含单词的列和单词的大小。
我想要得到的结果(以及我想要设计的查询)是获取10个随机单词,即10个随机的2个字母单词,10个随机的3个字母单词等等。
此外,当我的应用程序正在加载时,我正试图在AppDelegate中提前完成这一操作。
我想用几种方法来做,但真的需要你的意见:
我不知道如何有效地设计查询。我试图坚持一次获取的规则,并尽可能地对数据进行排序。
提前谢谢。Pras。
发布于 2012-01-30 15:15:24
我想我已经通过一些测试找到了自己的答案。
方法(1)显然是一种简单的方法,但过于资源密集,无法获取和存储大量的数据。
方法(3)太愚蠢了。
因此,我选择了一些新获得的核心数据技能的方法(2)。
该方法如下:
虽然不是完全随机的,但上面的方法是 from ,并从随机偏移量返回10个顺序值,并将其存储到NSMutableArray。
Update:实际代码和详细说明可在我的教程页:http://prasannaellanti.com/tutorials/上找到
欢迎您提出其他建议。Pras。
发布于 2012-01-30 17:51:05
如果您的字典是相对静态的,预先计算不同长度的单词数。为每个单词保留一个自定义ID字段,将其标识为长度L的实例I。例如,"foo“可能是长度为3的单词的实例638,"fop”将为639,等等。
从这些范围生成随机索引(只是一个随机样本,而不替换给定L的1和Imax之间的数字),将它们放入一个NSSet中,并使用该集合应用谓词。
这样,您就不是检索所有对象,而是只检索一个子集,并使用一个fetch。费用是修改字典以保存预先计算的索引,您可能希望在某个地方跟踪Imaxes,但是如果您的字典变化不大,那么您只需要做一次索引(添加后续单词应该比较便宜)。
https://stackoverflow.com/questions/9018512
复制相似问题