假设我有一个数组,我想随机选取一个元素。
做这件事最简单的方法是什么?
最明显的方法就是array[random index]
。但也许有像ruby的array.sample
这样的东西?或者,如果不是,可以使用扩展来创建这样的方法吗?
发布于 2014-06-08 06:59:46
根据Lucas的说法,你可以像这样创建一个Array类的扩展:
extension Array {
func randomItem() -> Element? {
if isEmpty { return nil }
let index = Int(arc4random_uniform(UInt32(self.count)))
return self[index]
}
}
例如:
let myArray = [1, 2, 3, 4, 5, 6, 7, 8, 10, 12, 14, 16]
let myItem = myArray.randomItem() // Note: myItem is an Optional<Int>
发布于 2014-12-24 10:33:26
你也可以对扩展使用Swift内置的random()函数:
extension Array {
func sample() -> Element {
let randomIndex = Int(rand()) % count
return self[randomIndex]
}
}
let array = [1, 2, 3, 4]
array.sample() // 2
array.sample() // 2
array.sample() // 3
array.sample() // 3
array.sample() // 1
array.sample() // 1
array.sample() // 3
array.sample() // 1
发布于 2016-10-01 00:52:13
另一个Swift 3建议
private extension Array {
var randomElement: Element {
let index = Int(arc4random_uniform(UInt32(count)))
return self[index]
}
}
https://stackoverflow.com/questions/24003191
复制相似问题