2013-12-17 31 views
1

我使用
如何比較一組數字並確保沒有任何值是相同的?

self.number1 = [[NSNumber alloc] initWithInt:((arc4random() % 
       (hightestNumber-lowestNumber+1)) + lowestNumber)]; 

隨機產生6個號碼我做的所有六個數字,但一些數字出來一樣。我可以使用哪些代碼來確保沒有任何兩個或更多個數字具有相同的值。我打算使用if語句將數字與所有六個數字進行比較,然後再次調用arc4random代碼,但有可能再次出現另一個數字的相同值,我將不得不在之後再次對其進行測試。我真的很難過這個。感謝您的幫助。

+0

BOOL numberExist =([generatedNumbers filteredArrayUsingPredicate: NSPredicate ptedicateWithFormat:@「SELF ==%@」,newNumber]]。count> 0); – iiFreeman

+0

在那種情況下最好使用NSIndexSet – iiFreeman

回答

4

我可以使用哪些代碼來確保沒有任何兩個或多個數字具有相同的值。

一個集合沒有重複的值,所以一個選項是將數字添加到一個集合,直到集合的大小達到您想要的對象數量(在您的情況爲6)。

NSMutableSet *set = [NSMutableSet set]; 
while ([set count] < 6) { 
    [set addObject:@((arc4random() % (hightestNumber-lowestNumber+1)) + lowestNumber)]; 
} 

另一種選擇是從現有的列表中選擇號碼,刪除每一個你選擇:

NSArray *list = @[@5, @6, @7, @8, @9, @10, @11, @12, @13]; 
NSMutableArray *sourceList = [list mutableCopy]; 
NSMutableArray *finalList = [NSMutableArray array]; 
for (int i = 0; i < 6; i++) { 
    // (omitting code to choose a random index for brevity) 
    [finalList addObject:[sourceList objectAtIndex:randomIndex]]; 
    [sourceList removeObjectAtIndex:randomIndex]; 
} 

這種方法可以很好地工作,如果你從選擇列表包含連續的(或至少單調遞增)數字,因爲這可以很容易地保證源列表中的值是唯一的。

+1

這很好,謝謝!我使用了NSMutableSet。我從來沒有兩次獲得相同的號碼。真的很感謝幫助。 – lostAtSeaJoshua

+0

@lostAtSeaJoshua很高興幫助。如果您單擊我的答案旁邊的複選標記(或其他選項,如果您願意),它將標記回答的問題,以便其他人不會花時間解決問題。 – Caleb

+0

我希望我可以投票你的答案,但我的聲譽足夠高!對於那個很抱歉。 – lostAtSeaJoshua

2

除了迦勒的很好的建議,如果範圍是相對小的可以創建一個陣列,所有的值列舉shuffle它們,然後選擇第6

相關問題