随机数生成器功能不会重复

时间:2015-09-05 09:25:29

标签: ios swift random swift2

默认情况下,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

}

4 个答案:

答案 0 :(得分:4)

这种发电机通常不称为“随机数”发电机 “随机播放”或“置换”。 你必须先告诉它有多少件物品。否则你提出的建议毫无意义!

请在此处查看答案:How do I shuffle an array in Swift?

答案 1 :(得分:1)

您可以执行此操作,将要获取随机结果的数字范围添加到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];
}

我想这会做三重奏,但是如果你做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
}