How to select some elements from array randomly?
let array = ("one", "two", "three", "1", "2", "3", "4")
array.pick(10)
The suiji
package provides a pseudo-random number generator. With it, you can write a pick
function that returns random elements from the array:
#import "@preview/suiji:0.1.0"
// This will pick the same but random items every time
#let pick(num, arr) = {
// Generate the RNG with a random seed.
// This could also use `datetime.today().day()` or something
// similar to return a different number every day.
// If consecutive invocations need to yield different values,
// you can alternatively pass the seed as an argument.
let rng = suiji.gen-rng(3585789)
suiji.integers(rng, high: arr.len(), size: num)
.at(1)
.map(idx => arr.at(idx))
}
#let array = ("one", "two", "three", "1", "2", "3", "4")
#pick(10, array)
Note that this function will do the following:
This is because there is no true source of randomness in Typst so that incremental recompilation works. You can factor out the seed argument and pass a different seed every time if you need to get different picks at each call site.