假设我有一个数组,我想随机选取一个元素.

最简单的方法是什么?

最明显的方法是array[random index].但也许有类似ruby's array.sample的东西?或者,如果不是这样,是否可以使用扩展创建这样的方法?

推荐答案

Swift 4.2 and above

新推荐的方法是收集协议上的内置方法:randomElement().它返回一个可选值,以避免前面假设的空情况.

let array = ["Frodo", "Sam", "Wise", "Gamgee"]
print(array.randomElement()!) // Using ! knowing I have array.count > 0

If you don't create the array and aren't guaranteed count > 0, you should do something like:

if let randomElement = array.randomElement() { 
    print(randomElement)
}

Swift 4.1 and below

为了回答您的问题,您可以这样做来实现随机数组 Select :

let array = ["Frodo", "sam", "wise", "gamgee"]
let randomIndex = Int(arc4random_uniform(UInt32(array.count)))
print(array[randomIndex])

这些铸件很难看,但我相信它们是必需的,除非其他人有别的办法.

Swift相关问答推荐

通过withstickedContinuation传递通用类型T

try 在SwiftUI中做5星评级

更改正在进行的异步任务的完成(SWIFT并发)(&q;)?

在SwiftUI中使用自定义图像填充列表行的正确方法

在Swift中,是否只有iOS版本超过15才能导入Swift包?

使用MKLocalSearch获取坐标

出错-无法将季节类型的值转换为预期的参数类型';[水果]';

如何避免切换视图递归onChange调用SwiftUI

按数组大小进行类型判断?

本地对象的异步/等待引用捕获总是安全的还是理论上不安全?

在领域 SwiftUI 异常中使用 Apple 登录:无法识别的 Select 器发送到实例

在 Swift 的异步上下文中,如何指示我想要函数的同步版本?

SwiftUI:当 currentIndex 值更改时,数组中的第 n 个视图是否已换出?

并发执行代码中捕获的 var 的变异

Vapor 4 身份验证问题 [用户未通过身份验证]

如何更改 Picker 的边框 colored颜色

使用协议捕获 SwiftUI 视图

为什么 switch 在 optional 中不接受 case nil?

iOS:检测设备是否为 iPhone X 系列(无框)

为 UIImagePicker 设置委托返回错误