假设我有一个数组,我想随机选择一个元素。
最简单的方法是什么?
最明显的方法是array[random index]。但也许有一些类似ruby的array。sample?如果没有,可以通过使用扩展来创建这样的方法吗?
假设我有一个数组,我想随机选择一个元素。
最简单的方法是什么?
最明显的方法是array[random index]。但也许有一些类似ruby的array。sample?如果没有,可以通过使用扩展来创建这样的方法吗?
当前回答
Swift 3 -简单易用。
创建数组 var arrayOfColors = [UIColor. var红色,用户界面颜色。黄色,用户界面颜色。橙色,UIColor.green] 创建随机颜色 let randomColor = arc4random() % UInt32(arrayOfColors.count) 将该颜色设置为对象 你的项目= arrayOfColors[Int(randomColor)]
下面是SpriteKit项目用随机字符串更新SKLabelNode的一个例子:
let array = ["one","two","three","four","five"]
let randomNumber = arc4random() % UInt32(array.count)
let labelNode = SKLabelNode(text: array[Int(randomNumber)])
其他回答
这是一个扩展数组与空数组检查更安全:
extension Array {
func sample() -> Element? {
if self.isEmpty { return nil }
let randomInt = Int(arc4random_uniform(UInt32(self.count)))
return self[randomInt]
}
}
你可以这样简单地使用它:
let digits = Array(0...9)
digits.sample() // => 6
如果你喜欢一个框架,也有一些更方便的功能,然后签出handysswift。你可以通过Carthage将它添加到你的项目中,然后像上面的例子一样使用它:
import HandySwift
let digits = Array(0...9)
digits.sample() // => 8
此外,它还包括一个选项,一次获得多个随机元素:
digits.sample(size: 3) // => [8, 0, 7]
最新的swift3代码尝试它的工作良好
let imagesArray = ["image1.png","image2.png","image3.png","image4.png"]
var randomNum: UInt32 = 0
randomNum = arc4random_uniform(UInt32(imagesArray.count))
wheelBackgroundImageView.image = UIImage(named: imagesArray[Int(randomNum)])
重复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>
Swift的另一个建议
private extension Array {
var randomElement: Element {
let index = Int(arc4random_uniform(UInt32(count)))
return self[index]
}
}
检查空数组的替代功能实现。
func randomArrayItem<T>(array: [T]) -> T? {
if array.isEmpty { return nil }
let randomIndex = Int(arc4random_uniform(UInt32(array.count)))
return array[randomIndex]
}
randomArrayItem([1,2,3])