リストの要素をシャッフルしようとしています:
(* 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 を誤用していますか?
(注:この答えは私にとってはうまくいきますが、なぜこの動作が現れるのか知りたいです。)