在NSArray中获取重复项

时间:2013-03-02 12:23:05

标签: ios objective-c cocoa-touch nsarray

我有一个包含一些重复对象的NSArray。我想打印哪些对象正在重复,例如:

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

现在我想在我的控制台A& B因为这些是重复的。

我该怎么做?

5 个答案:

答案 0 :(得分:11)

您可以使用NSCountedSet。您可以在计数集中添加所有对象,然后使用countForObject:方法查找每个对象出现的频率。阅读NSCountedSet以获取进一步的参考资料

答案 1 :(得分:6)

使用NSCountedSet并仅打印为countForObject:方法返回数字> 1的元素

答案 2 :(得分:3)

这可能远非完美,但它有效

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]);

答案 3 :(得分:0)

另一种方法是对数组进行排序并查找相邻的重复项。可能比使用散列集方法慢一点,但基本相同的“大O”。

答案 4 :(得分:-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]);
    }
  }
}