首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >从数组中选取一个随机元素

从数组中选取一个随机元素
EN

Stack Overflow用户
提问于 2014-06-03 04:59:22
回答 8查看 106.7K关注 0票数 198

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

做这件事最简单的方法是什么?

最明显的方法就是array[random index]。但也许有像ruby的array.sample这样的东西?或者,如果不是,可以使用扩展来创建这样的方法吗?

EN

回答 8

Stack Overflow用户

发布于 2014-06-08 06:59:46

根据Lucas的说法,你可以像这样创建一个Array类的扩展:

代码语言:javascript
复制
extension Array {
    func randomItem() -> Element? {
        if isEmpty { return nil }
        let index = Int(arc4random_uniform(UInt32(self.count)))
        return self[index]
    }
}

例如:

代码语言:javascript
复制
let myArray = [1, 2, 3, 4, 5, 6, 7, 8, 10, 12, 14, 16]
let myItem = myArray.randomItem() // Note: myItem is an Optional<Int>
票数 137
EN

Stack Overflow用户

发布于 2014-12-24 10:33:26

你也可以对扩展使用Swift内置的random()函数:

代码语言:javascript
复制
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
票数 18
EN

Stack Overflow用户

发布于 2016-10-01 00:52:13

另一个Swift 3建议

代码语言:javascript
复制
private extension Array {
    var randomElement: Element {
        let index = Int(arc4random_uniform(UInt32(count)))
        return self[index]
    }
}
票数 9
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/24003191

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档