如何计算字典中的重复对象?

时间:2012-11-19 12:07:50

标签: iphone ios xcode nsdictionary

我有一个带有重复对象的字典对象数组,我需要创建另一个没有重复对象的数组,另一个键表示该对象重复的次数。

示例:

object A (key1, key2)
object B (key1, key2)
object C (key1, key2)
object B (key1, key2)
object B (key1, key2)

结果,使用新词典数组:

object A (key1, key2, count(1))
object B (key1, key2, count(3))
object C (key1, key2, count(1))

我很难过NSDictionary个新对象,到目前为止的代码:

for(int j = 1; j < [objects count]; j++)
{
    for(int k = j+1;k < [objects count]-j;k++)
    {
        NSMutableDictionary *item1 = [objects objectAtIndex:j];
        NSMutableDictionary *item2 = [objects objectAtIndex:k];

        NSString *str1 = [item1 valueForKey:@"setArrivalAirportOrCode"];
        NSString *str2 = [item2 valueForKey:@"setArrivalAirportOrCode"];

        NSLog(@"%@==%@ ???",str1,str2);
        if([str1 isEqualToString:str2])
            NSLog(@"%@==%@",str1,str2);
    }
}

我试图计算对象并将它们复制到一个新阵列,我不确定我是否朝着正确的方向前进,抱歉我的英语不好而且请不要投票,只要问我任何我的意思永远在线。

提前致谢!

1 个答案:

答案 0 :(得分:3)

创建一个NSCountedSet,它会照顾你的计数。

在这个例子中,我使用了NSString对象,但它可以用任何类型的对象完成:

NSString        *stringA    = @"stringA";
NSString        *stringB    = @"stringB";
NSString        *stringC    = @"stringC";
NSArray         *array      = [NSArray arrayWithObjects:stringA, stringB, stringC, stringB, stringB, nil];
NSCountedSet    *countedSet = [NSCountedSet setWithArray:array];

NSLog(@"%@", countedSet);
// Results:  <NSCountedSet: 0x6b35790> (stringA [1], stringB [3], stringC [1])

为了获得计数,您可以使用:

NSLog(@"%d", [countedSet countForObject:stringB]);
// Result:  3

为了将结果放在一个单独的数组中(请注意,您丢失了计数,因此请使用计数集),请使用:

NSArray *array2 = [countedSet allObjects];
NSLog(@"%@", array2);
/*
 * (
 * stringA,
 * stringB,
 * stringC
 * )
 */