首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >核心数据-如何实现复杂的随机获取

核心数据-如何实现复杂的随机获取
EN

Stack Overflow用户
提问于 2012-01-26 13:07:29
回答 2查看 442关注 0票数 0

这是一个带有Core数据的通用设计查询,以及如何设计它以提高效率。

我的应用程序是一个单词游戏,有一个sqlite3数据库,其中包含一个从2-28个字母单词组成的字典。数据库中包含单词的列和单词的大小。

我想要得到的结果(以及我想要设计的查询)是获取10个随机单词,即10个随机的2个字母单词,10个随机的3个字母单词等等。

此外,当我的应用程序正在加载时,我正试图在AppDelegate中提前完成这一操作。

我想用几种方法来做,但真的需要你的意见:

  1. 获取一定大小的所有字母,然后在结果中获得随机记录。
  2. 使用索引上的偏移来获取随机单词,即0- 20 =2字母单词,21 - 972 =3字母单词
  3. 根据随机索引随机抽取500条记录,并希望这至少包含每长度10字。

我不知道如何有效地设计查询。我试图坚持一次获取的规则,并尽可能地对数据进行排序。

提前谢谢。Pras。

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2012-01-30 15:15:24

我想我已经通过一些测试找到了自己的答案。

方法(1)显然是一种简单的方法,但过于资源密集,无法获取和存储大量的数据。

方法(3)太愚蠢了。

因此,我选择了一些新获得的核心数据技能的方法(2)。

该方法如下:

  1. 将我的方法设置为后台线程
  2. 以标准方式设置NSFetchRequest、NSManagedObjectContext和NSEntityDescription。
  3. 将谓词应用于请求(例如,长度为2的所有单词
  4. )使用
  5. 来获取值的计数(使用countForFetchRequest:)使用偏移量值(我知道每个长度的偏移量(硬编码)),然后将偏移量添加到(arc4random % count值)--确保检查我的随机偏移量在接近最大计数时是否可以旋转,例如,如果count = 22,和随机偏移量=21)
  6. 集获取限制返回少量的结果,例如10.
  7. 执行fetch

虽然不是完全随机的,但上面的方法是 from ,并从随机偏移量返回10个顺序值,并将其存储到NSMutableArray。

Update实际代码和详细说明可在我的教程页:http://prasannaellanti.com/tutorials/上找到

欢迎您提出其他建议。Pras。

票数 0
EN

Stack Overflow用户

发布于 2012-01-30 17:51:05

如果您的字典是相对静态的,预先计算不同长度的单词数。为每个单词保留一个自定义ID字段,将其标识为长度L的实例I。例如,"foo“可能是长度为3的单词的实例638,"fop”将为639,等等。

从这些范围生成随机索引(只是一个随机样本,而不替换给定L的1和Imax之间的数字),将它们放入一个NSSet中,并使用该集合应用谓词。

这样,您就不是检索所有对象,而是只检索一个子集,并使用一个fetch。费用是修改字典以保存预先计算的索引,您可能希望在某个地方跟踪Imaxes,但是如果您的字典变化不大,那么您只需要做一次索引(添加后续单词应该比较便宜)。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/9018512

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档