随机数生成器function,不重复自己
默认情况下是否有一个随机数字生成器,只返回一次相同的数字?
例如,它会在1,2,3,4,5范围内select一个数字。 返回那个随机数(可以说3)。 在下一个循环中,它只从1,2,4,5等等中选取。
编辑:这是我结束了使用。 它从0-5返回一个整数数组,并在操场上进行testing。 请注意,这是用来从一大堆整数,而不仅仅是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 }
只需将最后一个随机数存储在一个variables中,并在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 }
这种发生器不叫“随机数”发生器,但通常是“随机”或“置换”。 你必须先告诉它有多less物品。 否则,你提出的build议没有任何意义!
在这里看到答案: 我如何在Swift中洗牌数组?
你可以做这个把戏,把你想要得到随机结果的数字范围添加到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]; }
我猜这会做的tric,但如果你做rmember NSMutableArray
不能采取Primitive数据types,只是像NSNumber
对象。
编辑
这行是不写,并certificate为什么我将NSNumber转换回整数,因为在数组中添加整数它必须转换为NSNumber
|
[ myMutableArray addObject:[NSNumber numberWithInt:2]];
所以在for循环,当我从myMutableArray
获取对象时,我得到一个NSNumber,并简化它我铸造该对象(NSNumber对象)回到一个整数。
从苹果的文档:
一个集合在集合中存储不同types的相同types的值,没有定义的顺序。
这似乎正是你以后,所以使一个数组似乎有点不明智…
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) }