0

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

例子:

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

我试图计算对象并将它们复制到一个新数组中,我不确定我是否朝着正确的方向前进,对不起我的英语不好,请不要投反对票,只要问我任何我一直在线的事情。

提前致谢!

4

1 回答 1

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
 * )
 */
于 2012-11-19T12:52:55.323 回答