我有两个想法:
1.将阵列洗牌并获得前4项。 - >开销,因为阵列可能非常大。
2.生成随机索引。如果之前使用过该索引,请再试一次,依此类推...... - >有点不可靠......
你知道更好,更有效的方法吗?
答案 0 :(得分:10)
随机播放阵列并获得前4个项目。 - >开销,因为阵列可能非常大。
使用modern version的Fisher Yates shuffle。它可以执行in-place,如果您在前四次交换后停止,它将为您提供所需的结果。没有必要洗牌整个阵列。
与其他一些解决方案相比,它还具有以下优势:如果只需要部分结果排列,则可以在中途停止