在Objective-C中对数组中的长数字列表中的相同数字进行分组

时间:2013-07-18 19:16:54

标签: ios objective-c sorting data-structures grouping

将一长串数字数组分组到objective-C中相同数字的较小数组中的有效方法是什么? 或者如果有一个标准库。

1 个答案:

答案 0 :(得分:1)

Cocoa有一个名为NSCountedSet的非常好的数据结构,专门用于处理可能重复的对象集。当你向它添加一系列对象(比如数字)时,结构会记住每个对象的添加次数。

例如,如果您从一个看起来像这样的序列开始

1, 3, 5, 2, 4, 2, 5, 6, 2, 4, 3

并将这些数字添加到计数集中,结构如下:

N - Count
- - -----
1 - 1
2 - 3
3 - 2
4 - 2
5 - 2
6 - 1

有了这个设置,您可以构建数组数组,或者只是将coutnted集保持为更有效的表示。

以下是一个例子:

NSArray *data = @[@1, @3, @5, @2, @4, @2, @5, @6, @2, @4, @3];
NSCountedSet *cs = [[NSCountedSet alloc] initWithArray:data];
NSEnumerator *enumerator = [cs objectEnumerator];
NSNumber *value;
while ((value = [enumerator nextObject])) {
    NSLog(@"%@ - %d", value, [cs countForObject:value]);
}