fir*_*hil 2 scala scala-collections
以下是从1到45范围内模拟数字彩票的必要解决方案,每次我们生成数字n1时,该数字将从可能的数字集合中删除.
是否有可能以更实用的方式实现相同目标?即使用地图,过滤等
def getNumbers :Array[Int] = {
val range = 1 to 45
var set = range.toSet
var resultSet:Set[Int] = Set()
var current: Int = 0
while(resultSet.size < 5 ){
current = Random.shuffle(set).head // pick the head of the shuffled set
set -= current
resultSet += current
}
resultSet.toArray
}
Run Code Online (Sandbox Code Playgroud)
"编辑"
示例从范围1到5中选择3个数字
Original Set is {1,2,3,4,5}
{1,2,3,4,5} shuffle(1) picked at random 3
{1,2,4,5} shuffle(2) picked at random 2
{1,4,5} shuffle(3) picked at random 4
original Set becomes {1,5}
numbers picked {3,2,4}
Run Code Online (Sandbox Code Playgroud)
每个shuffle随机化一个不同的SET!=>不同的概率
我希望看到一个功能性的"方法",5次洗牌而不是1次洗牌!
当然,这是可能的.集合API拥有您需要的一切.您正在寻找的是take,它将采用n集合的第一个元素,或者如果有少于,则采用与集合相同的元素n.
Random.shuffle(1 to 45).take(5).toArray
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
507 次 |
| 最近记录: |