我正在学习F#,并想知道生成随机数的以下逻辑是否可以接受。
这可以用更易维护的方式编写吗? 这段代码安全吗?
**Itemid** **UserID** **Rate** **Opinion**
0944947 5 3.2 Negative
0468569 5 Positive
0411008 2 2.1 Negative
更新
let hashset = System.Collections.Generic.HashSet<int>()
let mutable continueLooping = true
while (continueLooping) do
let value = System.Random().Next(0, 12)
let success = hashset.Add(value)
continueLooping <- hashset.Count <> 12
答案 0 :(得分:4)
您可以定义辅助函数来执行Fisher-Yates shuffle。这个shuffle函数非常有用,因为它可以在任何seq<'a>
上运行,因此你有很多机会重用它。
// shuffle a sequence into random order
let shuffle xs =
// swap two elements in the supplied array
let swap i j (array : _[]) =
let tmp = array.[i]
array.[i] <- array.[j]
array.[j] <- tmp
let rnd = System.Random()
let xArray = Seq.toArray xs
let n = Array.length xArray
for i in [0..(n-2)] do
let j = rnd.Next(i, n-1)
swap i j xArray
xArray |> Seq.ofArray
然后使用
将其应用于列表或其他内容let shuffledList = [0..11] |> shuffle |> Seq.toList