6 people like it.
Like the snippet!
Array Shuffle
Shuffling array using Seq.fold
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
13:
14:
15:
16:
17:
18:
19:
|
open System
let rng = new Random()
let Shuffle (org:_[]) =
let arr = Array.copy org
let max = (arr.Length - 1)
let randomSwap (arr:_[]) i =
let pos = rng.Next(max)
let tmp = arr.[pos]
arr.[pos] <- arr.[i]
arr.[i] <- tmp
arr
[|0..max|] |> Array.fold randomSwap arr
[|1..30|] |> Shuffle |> printfn "%A"
[|"F#";"C#";"Haskell";"JavaScript";"Erlang"|] |> Shuffle |> printfn "%A"
|
namespace System
val rng : Random
Full name: Script.rng
Multiple items
type Random =
new : unit -> Random + 1 overload
member Next : unit -> int + 2 overloads
member NextBytes : buffer:byte[] -> unit
member NextDouble : unit -> float
Full name: System.Random
--------------------
Random() : unit
Random(Seed: int) : unit
val Shuffle : org:'a [] -> 'a []
Full name: Script.Shuffle
val org : 'a []
val arr : 'a []
type Array =
member Clone : unit -> obj
member CopyTo : array:Array * index:int -> unit + 1 overload
member GetEnumerator : unit -> IEnumerator
member GetLength : dimension:int -> int
member GetLongLength : dimension:int -> int64
member GetLowerBound : dimension:int -> int
member GetUpperBound : dimension:int -> int
member GetValue : [<ParamArray>] indices:int[] -> obj + 7 overloads
member Initialize : unit -> unit
member IsFixedSize : bool
...
Full name: System.Array
val copy : array:'T [] -> 'T []
Full name: Microsoft.FSharp.Collections.Array.copy
val max : int
property Array.Length: int
val randomSwap : ('b [] -> int -> 'b [])
val arr : 'b []
val i : int
val pos : int
Random.Next() : int
Random.Next(maxValue: int) : int
Random.Next(minValue: int, maxValue: int) : int
val tmp : 'b
val fold : folder:('State -> 'T -> 'State) -> state:'State -> array:'T [] -> 'State
Full name: Microsoft.FSharp.Collections.Array.fold
val printfn : format:Printf.TextWriterFormat<'T> -> 'T
Full name: Microsoft.FSharp.Core.ExtraTopLevelOperators.printfn
More information