在Swift中从数组中获取随机元素

帕特里克

我有一个像这样的数组:

var names: String = [ "Peter", "Steve", "Max", "Sandra", "Roman", "Julia" ]

我想从该数组中获取3个随机元素。我来自C#,但是我不确定该从哪里开始。我想我应该先对数组进行随机排序,然后再从中选择前3个项目?

我尝试使用以下扩展名将其改组:

extension Array
{
    mutating func shuffle()
    {
        for _ in 0..<10
        {
            sort { (_,_) in arc4random() < arc4random() }
        }
    }
}

但随后在“ shuffle()”的位置说“'()'不可转换为'[Int]'”。

为了挑选一些元素,我使用:

var randomPicks = names[0..<4];

到目前为止看起来还不错。

如何洗牌?还是有人对此有更好/更优雅的解决方案?

里奥·达布斯

Xcode 11•Swift 5.1

extension Collection {
    func choose(_ n: Int) -> ArraySlice<Element> { shuffled().prefix(n) }
}

游乐场测试

var alphabet = ["A","B","C","D","E","F","G","H","I","J","K","L","M","N","O","P","Q","R","S","T","U","V","W","X","Y","Z"]
let shuffledAlphabet = alphabet.shuffled()  // "O", "X", "L", "D", "N", "K", "R", "E", "S", "Z", "I", "T", "H", "C", "U", "B", "W", "M", "Q", "Y", "V", "A", "G", "P", "F", "J"]
let letter = alphabet.randomElement()  // "D"
var numbers = Array(0...9)
let shuffledNumbers = numbers.shuffled()
shuffledNumbers                              // [8, 9, 3, 6, 0, 1, 4, 2, 5, 7]
numbers            // [0, 1, 2, 3, 4, 5, 6, 7, 8, 9]
numbers.shuffle() // mutate it  [6, 0, 2, 3, 9, 1, 5, 7, 4, 8]
numbers            // [6, 0, 2, 3, 9, 1, 5, 7, 4, 8]
let pick3numbers = numbers.choose(3)  // [8, 9, 2]

extension RangeReplaceableCollection {
    /// Returns a new Collection shuffled
    var shuffled: Self { .init(shuffled()) }
    /// Shuffles this Collection in place
    @discardableResult
    mutating func shuffledInPlace() -> Self  {
        self = shuffled
        return self
    }
    func choose(_ n: Int) -> SubSequence { shuffled.prefix(n) }
}

var alphabetString = "ABCDEFGHIJKLMNOPQRSTUVWXYZ"
let shuffledAlphabetString = alphabetString.shuffled  // "DRGXNSJLFQHPUZTBKVMYAWEICO"
let character = alphabetString.randomElement()  // "K"
alphabetString.shuffledInPlace() // mutate it  "WYQVBLGZKPFUJTHOXERADMCINS"
alphabetString            // "WYQVBLGZKPFUJTHOXERADMCINS"
let pick3Characters = alphabetString.choose(3)  // "VYA"

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

如何从数组中获取随机元素?

来自分类Dev

使用arc4random使用Swift获取数组中的随机元素

来自分类Dev

使用arc4random使用Swift获取数组中的随机元素

来自分类Dev

如何从数组中获取比数组更多的随机元素?

来自分类Dev

如何从Swift中的集合中获取随机元素?

来自分类Dev

Swift从数组中获取x个元素

来自分类Dev

Swift3 从数组中获取元素

来自分类常见问题

如何从数组中获取一些随机元素?

来自分类Dev

PHP如何从多维数组中获取随机元素?

来自分类Dev

PHP如何从多维数组中获取随机元素?

来自分类Dev

如何从PHP中的多维数组获取随机元素

来自分类Dev

通过泛型函数获取数组中的随机元素

来自分类Dev

如何获取,返回和删除数组中的随机元素?

来自分类Dev

从java数组中获取五个随机元素

来自分类Dev

Swift UI:使用数组中的随机元素更新视图

来自分类Dev

从集合中获取随机元素

来自分类Dev

从数组中获取随机列表?

来自分类Dev

从数组中获取随机项

来自分类Dev

从数组中获取随机值

来自分类Dev

获取数组中的元素?

来自分类Dev

Swift:从元组数组中获取元素数组

来自分类Dev

随机获取n个元素数组,并将其插入指定的元素中

来自分类Dev

从数组PHP中的先前随机选择的元素中随机选择

来自分类Dev

如何从Parse的指针数组中获取元素-使用Swift

来自分类Dev

在C中随机生成数组元素

来自分类Dev

从Bash数组中删除随机元素

来自分类Dev

从React中的数组渲染随机元素

来自分类Dev

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

来自分类Dev

在ZSH中访问随机数组元素