Swift 等价于 Java 的随机 class(孤立的 PRNG)

What is the Swift equivalent of Java's Random class (isolated PRNG)

Swift 中关于随机数生成的大多数讨论都是关于 arc4random() 和其他生成全局随机数序列的标准 C 函数。在某些情况下,拥有一个独立的伪随机数生成器会很有用,它可以提供独立的、可重现的数字流。例如在游戏中,您可能希望为游戏的两个方面提供可重现的随机序列,并且调用这两个方面的顺序不应改变各自的流。

OP 提供的答案

rand_r() 函数通过对自己的种子值进行操作来维持状态来实现此目的。这是一个简单的例子,说明如何用这个模仿 Java 随机 class。

/** Java style PRNG */
public class Random
{
    var seed : UInt32 = 0

    init( _ seed : UInt32 ) {
        self.seed = seed
    }

    /** float 0-1.0 */
    public func nextFloat() -> Float {
        return Float(rand_r(&seed)) / Float(INT32_MAX);
    }

}

rand_r() 函数通过对自己的种子值进行操作来维持状态来实现此目的。这是一个简单的例子,说明如何用这个模仿 Java 随机 class。

/** Java style PRNG */
public class Random
{
    var seed : UInt32 = 0

    init( _ seed : UInt32 ) {
        self.seed = seed
    }

    /** float 0-1.0 */
    public func nextFloat() -> Float {
        return Float(rand_r(&seed)) / Float(INT32_MAX);
    }

}