如何在 swift 2 中打印随机数组?

Posted

技术标签:

【中文标题】如何在 swift 2 中打印随机数组?【英文标题】:How to print a random array in swift 2? 【发布时间】:2016-02-07 14:30:35 【问题描述】:

如果我有一个类似的数组

var array = ["heads", "tails"]

如何打印或显示随机数?有时是正面还是反面?

我目前是初学者。

语言 - Swift 2

【问题讨论】:

【参考方案1】:

有两个选项可用于 IBM Sandbox...

import SwiftShims
var array = ["heads", "tails"]
for _ in 0..<10 
    print(array[Int(_swift_stdlib_arc4random_uniform(UInt32(array.count))])

import Glibc
var array = ["heads", "tails"]
for _ in 0..<10 
   print(array[Int(random() % array.count)])

【讨论】:

【参考方案2】:

您只需要在0array length - 1 之间生成一个随机的Int

然后使用该数字访问数组。

let list = ["heads", "tails"]
assert(!list.isEmpty)
let random = Int(arc4random_uniform(UInt32(list.count)))
print(list[random])

【讨论】:

【参考方案3】:

使用返回随机Int的随机函数:

import Foundation

// returns randomly 0 or 1
random() % 2

// returns randomly had or tails
array[random() % 2]

不幸的是,在线 Swift 编译器不支持random(),因此我们必须自己实现一个随机生成器(来自Swift Book):

// random generator
final class LinearCongruentialGenerator 
    var lastRandom = 42.0
    let m = 139968.0
    let a = 3877.0
    let c = 29573.0

    func random() -> Double 
        lastRandom = ((lastRandom * a + c) % m)
        return lastRandom / m
    


let r = LinearCongruentialGenerator()

var array = ["heads", "tails"]
for _ in 0..<100 
    print(array[Int(r.random() * 2)])

这里是IBM Swift Sandbox

【讨论】:

它没有打印任何东西。 @user5895179 你必须使用打印:print(array[random() % 2]) 试过了。给出错误。我正在使用 swift 在线编译器。 @user5895179 编辑后的答案与在线 Swift 编译器兼容。 谢谢!!上一个兼容xcode?​​span> 【参考方案4】:

你可以这样试试

var array = ["heads", "tails"]

假设

var range = 100
random() % range  // It Returns int

它将返回一个介于 0 和 100 之间的随机数

rand() % 2 // It Returns Int32

array[rand()%2]  //Error
array[random()%2]  //Random

【讨论】:

【参考方案5】:

对于更通用的解决方案,对array 进行扩展以返回随机元素(如果数组为空,则为nil

extension Array 
    func getRandomElement() -> Element? 
        if self.count > 0 
            return self[Int(arc4random_uniform(UInt32(self.count) ?? 0))]
        
        else 
            return nil
        
    


var arr = ["heads", "tails"]
print(arr.getRandomElement() ?? "Array empty...") // "tails", ...

或者,使用非通用压缩解决方案

print(arr[Int(arc4random_uniform(2))])

arc4random_uniform(n) 方法在0..&lt;n 范围内返回一个随机整数,在这种情况下,比使用random() 后跟模运算更好; random() 返回由Int 表示的任何 个整数。


(我现在注意到您在 cmets 到 Qbyte:s 的回答中提到您正在使用似乎不支持的在线编译器,例如 arc4random_uniform。请参阅 @user3441734:s 回答以了解如何访问例如 @987654331 @这种情况下的方法)

【讨论】:

dfri,您仍然可以在 Linux 平台(IBM Sandbox)上使用 arc4random_uniform。看我的回答,怎么做...

以上是关于如何在 swift 2 中打印随机数组?的主要内容,如果未能解决你的问题,请参考以下文章

如何在 Xcode11 中的 Swift 中随机播放数组中的音频文件?

如何使用 userDefaults 保存打印数组(swift 3)

在 Swift 3 中从数组中播放随机声音

Swift - 我如何在闭包之外返回数组值?

在随机颜色数组中替换属性 CGColorGetComponents(在 swift 4 中不可用)

如何在 Swift 中打乱数组?