如何返回随机多整数

时间:2019-07-11 21:26:02

标签: swift

我迅速有一个测验程序。一切正常,但是我想通过使用函数而不是将每个项目分开来提高效率!

感谢您的帮助!

我在操场上尝试使用:

func random( a:Int, b:Int, c:Int) -> (Int, Int, Int)
    return Int(arc4random_uniform(UInt32(a, b, c)))

我收到一个错误消息:

  

不能为类型为'(Int,Int,Int)'的参数列表调用'UInt32'类型的初始化程序

2 个答案:

答案 0 :(得分:5)

您有几个问题。

  1. 您需要分别生成三个数字,然后返回三个结果的元组。您只拨打一次arc4random_uniform()
  2. arc4random_uniform()仅使用一个UInt32,而您尝试通过将三个Int传递给UInt32初始化程序(这是一个不存在的初始化程序)的结果)。

我建议使用Int.random(in:)而不是arc4random_uniform()

func random(a: Int, b: Int, c: Int) -> (Int, Int, Int) {
    return (.random(in: 0..<a), .random(in: 0..<b), .random(in: 0..<c))
}

注意:您无需在调用Int中显式使用Int.random(in: 0..<a),因为Swift可以从返回类型推断出Int的功能。

示例:

for _ in 1...20 {
    print(random(a: 2, b: 6, c: 100))
}
(0, 3, 5)
(0, 1, 32)
(0, 1, 90)
(0, 3, 17)
(1, 0, 34)
(0, 1, 78)
(1, 0, 71)
(0, 1, 85)
(1, 0, 27)
(1, 0, 26)
(0, 0, 93)
(0, 1, 46)
(1, 4, 47)
(1, 1, 12)
(0, 2, 21)
(1, 3, 72)
(0, 2, 62)
(0, 5, 50)
(1, 2, 23)
(1, 4, 21)

替代实施

通过获取可变数量的最大输入并返回一个数组,您可以灵活地处理所需数量的随机数:

func random(maxVals: Int...) -> [Int] {
    return maxVals.map { .random(in: 0..<$0) }
}

示例:

print(random(maxVals: 2, 6, 100))
[1, 4, 57]
print(random(maxVals: 2, 6))
[0, 5]

答案 1 :(得分:0)

您具有一个带有以下签名的功能:(Int, Int, Int) -> Int。 函数arc4random_uniform必须应用于UInt32而不是Int。 如果转换a,b,c会很好!