Hyperlinkv0.8.0-beta.28

Random

Random.shuffleconsteffect/Random.ts:219
<A>(elements: Iterable<A>): Effect.Effect<Array<A>>

Uses the pseudo-random number generator to shuffle the specified iterable.

When to use

Use to randomly reorder an iterable using the active Random service.

Example (Shuffling values)

import { Effect, Random } from "effect"

const program = Effect.gen(function*() {
  const values = yield* Random.shuffle([1, 2, 3, 4, 5])
  console.log(values)
})
Random Number Generators
Source effect/Random.ts:21911 lines
export const shuffle = <A>(elements: Iterable<A>): Effect.Effect<Array<A>> =>
  randomWith((r) => {
    const buffer = Array.from(elements)
    for (let i = buffer.length - 1; i >= 1; i = i - 1) {
      const index = Math.min(i, Math.floor(r.nextDoubleUnsafe() * (i + 1)))
      const value = buffer[i]!
      buffer[i] = buffer[index]!
      buffer[index] = value
    }
    return buffer
  })