我目前正在开发一个 Android 应用程序,我正在尝试从如下所示的数据库表中获取随机值:
| ID | Score|
| 1 | 20 |
| 2 | 5 |
| 5 | 5 |
| 6 | 5 |
| 14 | 15 |
(假设这些是表中唯一的值)
我想从这个表中得到一个随机值,其中 ID 1 40%,ID 2 10% ,ID 5 10% 等等......你去吧?
给定 a List<Integer>
,add()
每首歌曲索引score
时间,Collections.shuffle()
列表,并按顺序播放。为了获得更好的结果,请跳过连续重复。更多在这里。
任何已知数据库都不支持随机选择。如果您进行一些搜索,您可能会发现以下内容:
select * from my_table order by rand();
但这是非常低效的,因为它试图对整个表进行排序。
如果您的数据集不是太大,您可以简单地将整个表拉入一个数组并从该数组中随机选择。
现在加权选择,这更棘手。
一个更简单的版本会是这样的:
id)
和 weights ( weight
) ) 的列表。cwieght
每个 id 的累积权重。r
选择一个介于 0 和该总数之间的随机数。r >= cweight && r < cweight+weight
使用二进制印章搜索的项目,如果你是游戏的话。