当前位置: 首页 > 知识库问答 >
问题:

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

雍志文
2023-03-14

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

最简单的方法是什么?

最明显的方法是数组[随机索引]。但可能有类似ruby的数组。示例 ?或者,如果不是,那么可以使用扩展创建这样的方法吗?

共有3个答案

韶和璧
2023-03-14

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)))]
    }

}
周祺
2023-03-14

根据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>
柴琦
2023-03-14

Swift 4.2及以上

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

let array = ["Frodo", "Samwise", "Merry", "Pippin"]
print(array.randomElement()!) // Using ! knowing I have array.count > 0

如果不创建数组并且不保证计数

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

Swift 4.1及以下

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

let array = ["Frodo", "Samwise", "Merry", "Pippin"]
let randomIndex = Int(arc4random_uniform(UInt32(array.count)))
print(array[randomIndex])

铸件很丑,但我相信除非有人有其他方法,否则它们是必需的。

 类似资料:
  • 问题内容: 假设我有一个数组,我想随机选择一个元素。 最简单的方法是什么? 明显的方法是。但是也许有红宝石之类的东西?或者如果不能通过扩展创建这种方法? 问题答案: Swift 4.2及更高版本 推荐的新方法是Collection协议的内置方法:。它返回一个可选参数以避免我以前假设的空情况。 如果不创建数组并且不能保证count> 0,则应执行以下操作: Swift 4.1及以下 只是为了回答您的

  • 问题内容: 我有一个数字值数组,我想从该数组中随机选择一个值,然后将其插入变量中。 我不确定您需要查看什么代码。所以, 这是我用来生成13个数字(1-13)并将其插入到数组中的循环。 效果很好,但是现在我需要从该数组中选择2个随机值(然后将其插入变量中,以备后用。 我到过很多网站,已经看到了类似的事情,例如将值插入到数组中,然后用于从数组中选择值,然后从数组中删除它。但是,无论何时我使用它都行不通

  • 问题内容: 我正在寻找从整数数组中随机选择数字的解决方案。 例如我有一个数组,如何随机选择一个数字? 问题答案:

  • 我被分配了一项编程任务,但我被卡住了。其说明如下: 有一个名为“秘密圣诞老人”(给他们礼物)的游戏,有很多孩子参加。对于每个参与的孩子,都有一个来自参与孩子的秘密圣诞朋友。我必须编写一个程序,为每个参与的孩子挑选一个秘密的圣诞老人朋友。 示例:如果Bob,Alice,John和George是参与的孩子,在随机选择之后, 输出可能看起来像 具有相同输入的连续两次程序运行不应有相同的结果。 我的想法是

  • 问题内容: 我有两个相关的numpy数组和。我需要从中选择随机行,并将其存储在数组中,并将其对应的值附加到随机选择的点的索引上。 我有另一个数组,它存储我不想采样的索引列表。 我怎样才能做到这一点? 样本数据: 如果这些是随机选择的(其中): 所需的输出将是: 我怎样才能做到这一点? 问题答案: 您可以使用以下方法创建随机索引: 然后,您只需要使用结果索引数组:

  • 问题内容: 如何从集合中选择随机元素?我对从Java中的HashSet或LinkedHashSet中选择随机元素特别感兴趣。也欢迎使用其他语言的解决方案。 问题答案: