默认情况下,swift是否有一个随机数生成器只返回一次相同的数字?
例如,它选择范围1,2,3,4,5中的数字。返回那个随机数(比方说3)。在下一个循环中,它仅从1,2,4,5中选取,依此类推。
修改 这就是我最终使用的。它返回0-5的整数数组,并在操场上进行测试。请注意,这是在从大量整数中选取而不仅仅是6时使用的。
func generateRandomArray() -> [Int]{
var randomImages: [Int] = [Int]()
var newRandomNumber = Int(arc4random_uniform(UInt32(6)))
while (randomImages.count < 6) {
if (randomImages.contains(newRandomNumber) == false){
randomImages.append(newRandomNumber)
}
newRandomNumber = Int(arc4random_uniform(UInt32(6)))
}
return randomImages
}
答案 0 :(得分:4)
这种发电机通常不称为“随机数”发电机 “随机播放”或“置换”。 你必须先告诉它有多少件物品。否则你提出的建议毫无意义!
请在此处查看答案:How do I shuffle an array in Swift?
答案 1 :(得分:1)
您可以执行此操作,将要获取随机结果的数字范围添加到NSMutableArray
或NSMutableSet
(以确保只有1个)。
迭代数组 -
for(int i=0;i<myMutableArray .count;i++){
int randomIndex = arc4random_uniform(myMutableArray.count);
int myNumber = [[myMutableArray objectAtIndex:randomIndex]intValue]; // edited
NSLog(@"My random number-%i",myNumber);//this is your generated random number
[myMutableArray removeObjectAtIndex:randomIndex];
}
我想这会做三重奏,但是如果你做rmember NSMutableArray
不能采用原始数据类型,只需像NSNumber
这样的对象。
这一行没有编写,并证明我为什么要将NSNumber转换回整数,因为在数组中添加整数时必须将其转换为NSNumber
|
[ myMutableArray addObject:[NSNumber numberWithInt:2]];
所以在for循环中,当我从myMutableArray
获取对象时,我得到一个NSNumber并简化它,我将该对象(NSNumber对象)转换回整数。
答案 2 :(得分:1)
来自Apple的文档:
集合在集合中存储相同类型的不同值,但没有 定义排序。
这似乎完全你所追求的是什么,所以制作一个阵列似乎有点不明智......
var values : Set<Int> = []
var value : Int {
return Int(arc4random() % 6 + 1)
}
while values.count < 6 {
values.insert(value)
}
您可能希望在某个地方查看这些值:
for value in values {
println(value)
}
答案 3 :(得分:0)
只需将最后一个随机数存储在变量中,然后在while
循环中检查下一个随机数。当新的随机数与最后一个随机数相同时,生成一个新的随机数。生成的新随机数与最后一个随机数不同后,while
循环结束,我们更新最后一个随机数。
var lastRandomNumber = 0
var newRandomNumber = 0
func gernerateRandomNumber() {
newRandomNumber = Int(arc4random_uniform(5)+1)
while newRandomNumber == lastRandomNumber {
newRandomNumber = Int(arc4random_uniform(5)+1)
}
lastRandomNumber = newRandomNumber
}