2013-03-02 12 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”。