2013-03-02 9 views
4

我有一個包含一些重複對象的NSArray。我要打印的對象越來越重複,例如:在NSArray中獲取重複內容

NSArray * array = [NSArray arrayWithObjects: A, B, C, A, B]; 

現在我想在我的控制檯A & B因爲這些重複打印。

我該怎麼做?

+1

定義重複。如何平等?相同的對象或相同的內容 – uchuugaka 2013-03-02 12:52:50

+1

你是指在「重複的問題」? – 2013-03-02 13:41:21

回答

5

使用的NSCountedSet,只打印返回一個數> 1的元素countForObject:方法

10

您可以使用NSCountedSet這一點。您可以將所有對象添加到計數集中,然後使用countForObject:方法找出每個對象出現的頻率。瞭解NSCountedSet進一步參考

+1

比我快30秒:) – 2013-03-02 12:32:55

-1

試試我的邏輯:

for(int i=0; i < array.count; i++) 
{ 
    for(int j=0; j< i; j++) 
    { 
    if([[array objectAtIndex:i] isEqualToString:[array objectAtIndex:j]]) 
    { 
     NSLog(@"%@",[array objectAtIndex:i]); 
    } 
    } 
} 
+0

這是一個N平方算法,如果N很大,可能會很慢。儘管如此,如果N很小,也不是不合理的,因爲它非常簡單。人們傾向於倒置N平方的東西。 – 2013-03-02 13:40:53

+0

@ HotLicks-我知道它很慢,但它是唯一的答案在這裏......還有OP在這裏沒有提到它很長的陣列:(所以,我沒有錯! – iPatel 2013-03-02 13:45:32

2

這可能是完美遠,但它的工作原理

NSArray *array = [NSArray arrayWithObjects:@"a", @"b", @"b", @"v", @"f", @"f", nil]; 

NSMutableArray *un_array = [NSMutableArray array]; 
NSMutableArray *dupArray = [NSMutableArray array]; 

for (id obj in array) 
{ 
    if (![un_array containsObject:obj]) 
     [un_array addObject:obj]; 
    else 
     [dupArray addObject:obj]; 
} 

NSLog(@"DUPLICATES:"); 
for (id obj in dupArray) 
    NSLog(@"%@", [obj description]); 
+0

這實質上是N平方,但好奇地得到了 - 投票 – 2013-03-02 13:42:49

+0

開發者選擇他們的戰鬥很重要,是的,這不是最好的方式,特別是一旦數組變大了,但對於微型陣列來說,它可能沒問題。 – runmad 2015-11-30 14:34:50

0

另一種方法是對數組進行排序,並尋找相鄰重複。可能比使用哈希集合方法稍慢一些,但基本相同的「大O」。