ios 生成不重複隨機數
阿新 • • 發佈:2019-02-03
一、先講下ios三種取隨機數的方法:
1. srand((unsigned)time(0)); //不加這句每次產生的隨機數不變
int i = rand() % 5;
2. srandom(time(0));
int i = random() % 5;
3. int i = arc4random() % 5 ;
注:rand()和random()實際並不是一個真正的偽隨機數發生器,在使用之前需要先初始化隨機種子,否則每次生成的隨機數一樣。
arc4random() 是一個真正的偽隨機演算法,不需要生成隨機種子,因為第一次呼叫的時候就會自動生成。而且範圍是rand()的兩倍。在iPhone中,RAND_MAX是0x7fffffff (2147483647),而arc4random()返回的最大值則是 0x100000000 (4294967296)。
精確度比較:arc4random() > random() > rand()。
常用方法:arc4random
例: 獲取一個隨機整數範圍在:[0,100)包括0,不包括100
int x = arc4random() % 100;
二、生成不重複隨機數
思想:其原理就是利用兩個陣列,第一個陣列存放要隨機的原始資料,第二個陣列存放結果;然後arc4random產生一個隨機數,將這個隨機數用作下標,把第一個陣列對應下標的資料取出並刪除。取出後存入第二個陣列。然後迴圈往復就可以了。即便兩次arc4random產生的隨機數是相同的,但第一個陣列對應下標的資料卻是不一樣的。
例:0-7亂序輸出
-(NSArray *)randomArray { //隨機數從這裡邊產生 NSMutableArray *startArray=[[NSMutableArray alloc] initWithObjects:@0,@1,@2,@3,@4,@5,@6,@7, nil]; //隨機數產生結果 NSMutableArray *resultArray=[[NSMutableArray alloc] initWithCapacity:0]; //隨機數個數 NSInteger m=8; for (int i=0; i<m; i++) { int t=arc4random()%startArray.count; resultArray[i]=startArray[t]; startArray[t]=[startArray lastObject]; //為更好的亂序,故交換下位置 [startArray removeLastObject]; } return resultArray; }