2014-02-09 62 views
1

我試圖在Xcode 5中創建一個NSMutableArray,我隨機生成1和12之間的數字並將它們存儲爲整數。問題有時會產生兩次相同的數字,這是不可取的。NSMutableArray存儲int無重複

//Load array 
NSMutableArray *theSequence = [[NSMutableArray alloc] init]; 

//Generate the Sequence 
for (NSInteger i=0; i < difficultyLevel; i++) { 
    int r = arc4random()%12 + 1; 

    //Check here if duplicate exists 
    [theSequence addObject:[NSNumber numberWithInteger:r]]; 
} 

其中difficultyLevel當前爲4,因爲應該有4個整數存儲。

我已經嘗試了其他堆棧溢出沒有成功的答案,任何人都可以定製[theSequence addObject:..]之前的某種循環,以便當我在標籤中顯示數字他們是獨特的?先謝謝你!

哈利

+1

只是FYI,你用'arc4random()%12'引入了[modulo bias](http://en.wikipedia.org/wiki/Fisher%E2%80%93Yates_shuffle#Modulo_bias)。 'arc4random_uniform(12)'是一個更好的選擇。見[這裏](https://developer.apple.com/library/mac/documentation/Darwin/Reference/ManPages/man3/arc4random_uniform.3.html)。 – Manny

回答

2

由於int S的順序並不重要(它們是隨機的,反正)與NSMutableSet更換NSMutableArray容器將讓你避免重複。所有你現在需要做的是檢查容器的大小,當你到達四個所需的大小停止:

NSMutableSet *theSequence = [NSMutableSet set]; 

do { 
    int r = arc4random()%12 + 1; 
    [theSequence addObject:[NSNumber numberWithInteger:r]]; 
} while (theSequence.count != difficultyLevel); 

注:如果由於某種原因插入順序很重要,你可以使用NSMutableOrderedSet

+0

如果順序很重要,OP可以簡單地使用'NSMutableOrderedSet'順便說一句。 –

+0

@David謝謝,大衛!這是一個非常好的評論。 – dasblinkenlight

+0

@dasblinkenlight就像一個魅力,你絕對的明星! :) – Xaser3