Skip to content

随机数操作

TIP

本节中的 API 来自 inaba,并由 Koishi 重新导出。

基本用法

ts
import { Random } from 'koishi'

// 静态方法
Random.bool(0.8)                // 80% 的概率返回 true
Random.shuffle([5, 1, 4])       // 随机打乱数组

// 使用自定义的随机数生成器
const random = new Random(() => Math.random())
random.int(0, 10)               // 生成一个 [0, 10) 的随机整数
random.pick([1, 2, 3])          // 随机选取一个元素

API

new Random(callback)

  • callback: () => number 一个返回 [0, 1) 的随机数的函数
  • returns: Random 实例

使用自定义的随机数生成器构造一个 Random 实例。

Random.bool(probability)

  • probability: number
  • returns: boolean

生成一个随机布尔值,有 probability 的概率为 1。

Random.real(start?, end)

  • start: number 下界,默认为 0
  • end: number 上界
  • 返回值: number 一个 [start, end) 之间的随机实数

生成一个随机实数。

Random.int(start?, end)

  • start: number 下界,默认为 0
  • end: number 上界
  • 返回值: number 一个 [start, end) 之间的随机整数

生成一个随机实数。

Random.pick(array, count?)

  • array: readonly T[] 数组
  • count: number 元素个数
  • 返回值: T 挑出的元素

从数组中随机挑出一个或多个元素,不改变原数组。如果未传入 count,则返回一个元素;否则返回一个包含 count 个元素的数组。

Random.shuffle(array)

  • array: T[] 数组
  • 返回值: T[] 新的数组

随机打乱数组中的元素,返回新的数组。此操作不修改原数组,相当于 Random.pick(array, array.length)

Random.weightedPick(weights)

  • weights: Record<T, number> 权重表
  • returns: T 挑出的元素

按照权重随机挑出一个元素。