swift - 在 Swift 中使用 arc4random 避免重复

标签 swift random arc4random

我有以下代码在 Swift 中生成随机填充的网格:

import Foundation

var tile = [String](count: 900, repeatedValue: ".")

// Randomly populate the grid with hashes
for i in 0...400 {
    tile[Int(arc4random_uniform(899))] = "#"
}

// Print the grid to console
for y in 0...(29) {
    for x in 0...(29) {
        print("\(tile[y * 10 + x])")
    }
    println("")
}

运行此代码会生成如下所示的网格:

..##..#.#...#..#..#.#.####.#..
..#..#..#.#.####.#....###.#.#.
#.####.#....###.#.#.#####.....
..###.#.#.#####.....#...#....#
#####.....#...#....###.##.###.
#...#....###.##.###..#.....#..
##.##.###..#.....#...##..#.##.
.#.....#...##..#.##...#.####..
.##..#.##...#.####..###..#.#.#
..#.####..###..#.#.#.#..#.....
###..#.#.#.#..#.........#...##
.#..#.........#...##.##.......
....#...##.##............#...#
.##............#...####....##.
.....#...####....##..#.#.....#
###....##..#.#.....#........#.
.#.#.....#........#...#.#..#..
........#...#.#..#......#....#
..#.#..#......#....#.##.#...##
....#....#.##.#...###...#..#..
.##.#...###...#..#..#.#..#...#
#...#..#..#.#..#...#####...##.
#.#..#...#####...##..#.......#
####...##..#.......#.#.#.....#
.#.......#.#.#.....##.........
.#.#.....##..........##.#..#.#
#..........##.#..#.##.#.#.....
.##.#..#.##.#.#.....##...#....
#.#.#.....##...#......#.##....
##...#......#.##.....#.######.

您可以清楚地看到一个模式在重复。有没有办法“抛”函数,让生成更有说服力?

最佳答案

你的打印函数是错误的:tile[y*10 + x] 应该是 tile[y*30 + x]


至于生成网格:您到底想要什么?

如果答案是“从所有可能 30x30 网格空间的均匀分布中随机选择,其中每个单元格是#”,那么您应该简单地选择具有相同概率的每个单元格 #:

for i in 0..<900 {
    // arc4random_uniform(2) is either 0 or 1, with equal probability
    tile.append(arc4random_uniform(2) == 0 ? "." : "#")
}

如果答案是“从 30x30 网格的均匀分布中随机选择,其中 恰好 400 个单元格#”,那么您应该预先选择 400 个唯一索引, 在将它们转换为 # 之前。

照原样,您的代码可能生成只有一个# 的网格(尽管这种可能性很小)。而且它永远不会生成超过 400 个 # 的网格。

关于swift - 在 Swift 中使用 arc4random 避免重复,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31422181/

相关文章:

Scala 随机数

ios - 如果我在 5 点或 5 :01, 调用 arc4random_uniform(6),我会得到相同的数字吗?

swift - 从 php 脚本发送时未收到 VoIP 推送通知

ios - Swift - 来自 URLSession 任务的 TableView 数据源

ios - 获取 View 被关闭时的时刻

ios - 在 Objective C (iOS) 中生成一个介于 0.0001 和 0.002 之间的随机数?

ios - iOS 上的 MobileVLCKit 问题(夜间构建)

python - C++ 和 Python 实现之间的不同伪随机数

ios - 如何快速进行多问题测验,以免问题重复出现?

ios - 是否有可能只有 2 个相同的数字来自 arc4random()?