我需要一个快速的算法来从通用列表中选择5个随机元素。例如,我想从一个List中获取5个随机元素。
List
遍历每个元素,使选择的概率等于(所需数量)/(剩余数量)
因此,如果您有40个项目,则第一个项目被选中的机会为5/40。如果它被选中,则下一个项目具有4/39的机会,否则它具有5/39的机会。当你到达结尾时,你会有你的5个项目,通常在那之前你会拥有全部。
这种技术称为选择抽样,它是水库抽样的一种特殊情况。它的性能类似于对输入进行洗牌,但当然允许生成样本而不修改原始数据。
使用linq:
YourList.OrderBy(x => rnd.Next()).Take(5)
用户名或电子邮箱地址
密码