1

我目前正在开发一个 Android 应用程序,我正在尝试从如下所示的数据库表中获取随机值:

| ID | Score|
| 1  | 20   |
| 2  | 5    |
| 5  | 5    |
| 6  | 5    |
| 14 | 15   |

(假设这些是表中唯一的值)


我想从这个表中得到一个随机值,其中 ID 1 40%,ID 2 10% ,ID 5 10% 等等......你去吧?

4

2 回答 2

1

给定 a List<Integer>add()每首歌曲索引score时间,Collections.shuffle()列表,并按顺序播放。为了获得更好的结果,请跳过连续重复。更多在这里

于 2012-04-09T04:10:15.027 回答
0

任何已知数据库都不支持随机选择。如果您进行一些搜索,您可能会发现以下内容:

select * from my_table order by rand();

但这是非常低效的,因为它试图对整个表进行排序。

如果您的数据集不是太大,您可以简单地将整个表拉入一个数组并从该数组中随机选择。

现在加权选择,这更棘手。

一个更简单的版本会是这样的:

  1. 获取表中所有 id (id)和 weights ( weight) ) 的列表。
  2. 遍历列表并计算cwieght每个 id 的累积权重。
  3. 当您到达列表末尾时,您将获得所有权重的总和。r选择一个介于 0 和该总数之间的随机数。
  4. 再次扫描列表,找到可以在其中r >= cweight && r < cweight+weight 使用二进制印章搜索的项目,如果你是游戏的话。

还有其他 更聪明的方法,这取决于某些限制。

于 2012-04-09T14:21:58.030 回答