为了账号安全,请及时绑定邮箱和手机立即绑定

从数组中选择一个随机元素

/ 猿问

从数组中选择一个随机元素

从数组中选择一个随机元素

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

最简单的方法是什么?

显而易见的方式是array[random index]。但也许有类似红宝石的东西array.sample?或者如果没有,可以使用扩展程序创建这样的方法?


查看完整描述

3 回答

?
慕田峪4524236

Swift 4.2及以上版本

新推荐的方法是Collection协议的内置方法:randomElement()。它返回一个可选项以避免我之前假设的空案例。

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

如果您不创建数组并且不保证计数> 0,您应该执行以下操作:

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

Swift 4.1及以下版本

只是回答你的问题,你可以这样做以实现随机数组选择:

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

铸件是丑陋的,但我相信它们是必需的,除非别人有另一种方式。


查看完整回答
反对 回复 2019-08-12
?
慕码人2483693

关于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>


查看完整回答
反对 回复 2019-08-12
?
慕容森

Swift 4版本:

extension Collection where Index == Int {

    /**
     Picks a random element of the collection.

     - returns: A random element of the collection.
     */
    func randomElement() -> Iterator.Element? {
        return isEmpty ? nil : self[Int(arc4random_uniform(UInt32(endIndex)))]
    }}


查看完整回答
反对 回复 2019-08-12
  • 3 回答
  • 0 关注
  • 414 浏览
我要回答

添加回答

回复

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信