我正在尝试打乱列表的元素:
(* Returns a list with the same elements as the original but in randomized order *)
let shuffle items =
items
|> List.map (fun x -> (x, System.Random().Next()))
|> List.sortBy snd
|> List.map fst
但是,这总是items
以相同的顺序返回,因为:
> List.map (fun x -> x, System.Random().Next()) [1; 2; 3];;
val it : (int * int) list = [(1, 728974863); (2, 728974863); (3, 728974863)]
> List.map (fun x -> x, System.Random().Next()) [1; 2; 3];;
val it : (int * int) list =
[(1, 1768690982); (2, 1768690982); (3, 1768690982)]
> List.map (fun x -> x, System.Random().Next()) [1; 2; 3];;
val it : (int * int) list = [(1, 262031538); (2, 262031538); (3, 262031538)]
为什么System.Random().Next()
每次调用总是返回相同的值?是因为连续的电话在时间上太接近了吗?还是我以其他方式滥用 API?
(注意:这个答案对我来说很好,但我很好奇为什么会出现这种行为。)