.shuffle()和.shuffled()是Swift的一部分
原历史问题:
我如何随机或洗牌在Swift数组中的元素?例如,如果我的数组包含52张扑克牌,我想要洗牌数组以洗牌牌组。
.shuffle()和.shuffled()是Swift的一部分
原历史问题:
我如何随机或洗牌在Swift数组中的元素?例如,如果我的数组包含52张扑克牌,我想要洗牌数组以洗牌牌组。
当前回答
这里有一些可能更短的内容:
sorted(a) {_, _ in arc4random() % 2 == 0}
其他回答
这是我所使用的:
func newShuffledArray(array:NSArray) -> NSArray {
var mutableArray = array.mutableCopy() as! NSMutableArray
var count = mutableArray.count
if count>1 {
for var i=count-1;i>0;--i{
mutableArray.exchangeObjectAtIndex(i, withObjectAtIndex: Int(arc4random_uniform(UInt32(i+1))))
}
}
return mutableArray as NSArray
}
在Swift 4.2中,现在有一个可变shuffle和不可变shuffle的方法。你可以在这里阅读更多关于随机生成和数组的东西。
这是最简单的方法。导入Gamplaykit到你的VC中,使用下面的代码。在Xcode 8中测试。
import GameplayKit
let array: NSArray = ["Jock", "Ellie", "Sue Ellen", "Bobby", "JR", "Pamela"]
override func viewDidLoad() {
super.viewDidLoad()
print(array.shuffled())
}
如果你想从数组中获得一个打乱的字符串,你可以使用下面的代码..
func suffleString() {
let ShuffleArray = array.shuffled()
suffleString.text = ShuffleArray.first as? String
print(suffleString.text!)
}
这是一些在playground上运行的代码。你不需要在实际的Xcode项目中导入Darwin。
import darwin
var a = [1,2,3,4,5,6,7]
func shuffle<ItemType>(item1: ItemType, item2: ItemType) -> Bool {
return drand48() > 0.5
}
sort(a, shuffle)
println(a)
let shuffl = GKRandomSource.sharedRandom().arrayByShufflingObjects(in: arrayObject)