From 1397ad7c5459d48c10cc19d487dc856bcb78e81a Mon Sep 17 00:00:00 2001 From: WhiteDuke Date: Mon, 25 Feb 2019 16:45:44 +0100 Subject: [PATCH] [random] add support for sets (#10532) * Support for sets * Rename 'rand' to 'sample' * Update random.nim --- lib/pure/random.nim | 12 ++++++++++++ 1 file changed, 12 insertions(+) diff --git a/lib/pure/random.nim b/lib/pure/random.nim index 86db7da497..4115d147b3 100644 --- a/lib/pure/random.nim +++ b/lib/pure/random.nim @@ -390,6 +390,18 @@ proc rand*[T](a: openArray[T]): T {.deprecated.} = ## Use `sample[T](openArray[T])<#sample,openArray[T]>`_ instead. result = a[rand(a.low..a.high)] +proc sample*[T](r: var Rand; s: set[T]): T = + ## returns a random element from a set + assert card(s) != 0 + var i = rand(r, card(s) - 1) + for e in s: + if i == 0: return e + dec(i) + +proc sample*[T](s: set[T]): T = + ## returns a random element from a set + sample(state, s) + proc sample*[T](r: var Rand; a: openArray[T]): T = ## Returns a random element from ``a`` using the given state. ##