得到数组中的迅速随机元素 [英] Get random elements from array in swift
本文介绍了得到数组中的迅速随机元素的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!
问题描述
我有这样一个数组:
var names: String = [ "Peter", "Steve", "Max", "Sandra", "Roman", "Julia" ]
我想从那个阵列3随机元素。我从C#来,但在迅疾我不确定从哪里开始。我想我应该先洗牌数组,然后挑弗里斯特3项从它的例子吗?
I would like to get 3 random elements from that array. I'm coming from C# but in swift I'm unsure where to start. I think I should shuffle the array first and then pick the frist 3 items from it for example?
我试着用下面的扩展洗牌吧:
I tried to shuffle it with the following extension:
extension Array
{
mutating func shuffle()
{
for _ in 0..<10
{
sort { (_,_) in arc4random() < arc4random() }
}
}
}
但它说:'()'是无法转换为[INT]'在位置洗牌()。
but it then says "'()' is not convertible to '[Int]'" at the location of "shuffle()".
有关捡了一些元素使用:
For picking a number of elements i use:
var randomPicks = names[0..<4];
这看起来好为止。
which looks good so far.
有关如何洗牌任何想法?或者没有任何人有这更好/更优雅的解决方案?
Any ideas about how to shuffle? Or does anyone have a better/more elegant solution for this?
推荐答案
更新:
import UIKit
import Foundation
extension Array {
var shuffle: [Element] {
var elements = self
for index in indices.dropLast() {
guard
case let swapIndex = Int(arc4random_uniform(UInt32(count - index))) + index
where swapIndex != index else { continue }
swap(&elements[index], &elements[swapIndex])
}
return elements
}
mutating func shuffled() {
for index in indices.dropLast() {
guard
case let swapIndex = Int(arc4random_uniform(UInt32(count - index))) + index
where swapIndex != index
else { continue }
swap(&self[index], &self[swapIndex])
}
}
var chooseOne: Element {
return self[Int(arc4random_uniform(UInt32(count)))]
}
func choose(n: Int) -> [Element] {
return Array(shuffle.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.shuffle
let letter = alphabet.chooseOne
var numbers = Array(0...9)
let shuffledNumbers = numbers.shuffle
shuffledNumbers // [8, 9, 3, 6, 0, 1, 4, 2, 5, 7]
numbers // [0, 1, 2, 3, 4, 5, 6, 7, 8, 9]
numbers.shuffled() // 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]
这篇关于得到数组中的迅速随机元素的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!
查看全文