2011-04-29 34 views
2

我需要一種方法來計算任何給定的MutableArray中對象的出現次數,然後將對象的索引返回到單獨的可變數組中。我試過這樣做了幾個方法,但無法弄清楚。Objective-C:查找對象在具有索引的數組中發生的次數

所以基本上說我有一個數組包含2,3,3,4,3,5,3當搜索3時,它應該給我的次數,4,和一個單獨的數組包含1,2 ,4,6(對象的索引。

我看到下面的代碼已經在這裏的網站上,但不能工作,如何修改它,任何人都可以幫我嗎?

int occurrences = 0; 
for(NSString *string in array){ 
    occurrences += ([string isEqualToString:@"Apple"]?1:0); //certain object is @"Apple" 
} 

回答

6
int occurrences = 0; 
NSMutableArray *indices = [NSMutableArray array]; 
int i = 0; 
for (i = 0; i < [array count]; i++) { 
    NSString *obj = [array objectAtIndex:i]; 
    if ([obj isEqualToString:@"Apple"]) { 
     occurrences++; 
     [indices addObject:[NSNumber numberWithInt:i]]; 
    } 
} 

您也可以使用occurrences刪除跟蹤並執行類似

int occurrences = [indices count]; 

for之後循環。

+1

我可能在這裏錯過了一些東西,但不是NS(可變)數組方法'count',而不是'length'? – 2011-04-29 21:04:14

+0

哎呀。糾正了這一點。 – mipadi 2011-05-01 19:23:42

0
id thingYouAreLookingFor; 

    NSIndexSet *result = [array indexesOfObjectsPassingTest:^BOOL(id obj, NSUInteger idx, BOOL *stop) { 
    return [thingYouAreLookingFor equals: obj]; 
    }]; 
0

簡單的方法來做到這一點,如果你不介意時間,這是一個平方時間操作。

  1. 保留一個計數器,記錄在array1的元素數量已經出現在數組2
  2. 在數組1的所有元素,測試,如果它在數組2存在。如果存在,則counter ++,如果不存在,則繼續。
  3. 返回計數器。

使用[myMutableArray containsObject:parameter]返回數組的布爾值array2包含一個元素或不包含元素。

相關問題