我有一个应用程序,我生成唯一的数字组合,例如每个组合都是唯一的。我想以一种方式存储组合,我应该能够稍后有效地检索一些随机组合。
以下是一个组合的示例
35 36 37 38 39 40 50
总共有大约4百万种组合。
我应该如何存储数据以便以后检索组合?
答案 0 :(得分:3)
由于您的组合是唯一的,并且您实际上没有对数字的查询条件,因此将它们存储在数据库中的方式无关紧要。只需将它们插入某些表中即可。要检索X随机组合,只需执行以下操作:
SELECT * FROM table ORDER BY RANDOM() LIMIT X
请参阅:
在SQLite中存储整数数组:
答案 1 :(得分:2)
我认为可能会有不同的解决方案;在以下意义上:你真的必须存储所有这些组合吗?!
假设这些组合只是“随机” - 你可能会使用一些(智能)数学,对某些函数getCombinationFor(),比如
public List<Integer> getCombinationFor(long whatever)
使用固定算法为每个传入输入创建唯一结果。
像:
getCombinationFor(0):给出0 1 2 3 10 20 30
getCombinationFor(1):给出1 2 3 4 10 20 30 40
以上当然很简单;根据您对这些序列的要求,您可能需要一些非常复杂的东西。但是:当然,你可以定义这样一个函数来返回一定范围内一组固定数字的排列!
重要的是:此函数为每个输入和任何输入返回唯一的List;并且也很重要:给定一定的序列,您可以立即确定用于创建该序列的数字。
因此,您只需定义一个知道如何以确定的方式创建唯一序列的算法,而不是生成包含唯一序列的大量数据。如果这对您有用,它完全可以让您免于存储序列!
编辑:记得我正在研究一些与这个问题/答案“接近”的事情......请参阅here!
答案 2 :(得分:0)
使用UNIQUE索引。在Unique Violation Exception上,只需重新随机化并发送下一条记录。
最简单的实现方法是:使用HashSet,随机数输入(最大值是数据库中的组合数-1),而hashSet.size()则小于所需的记录数。使用hashSet中的数字作为ID或记录(组合)的rownums来选择数据:WHERE ID in(此处为ids)。