随机数生成器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中洗牌数组?

你可以做这个把戏,把你想要得到随机结果的数字范围添加到NSMutableArrayNSMutableSet (确保只有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) }