pix*_*eak 5 iphone objective-c ipad ios
我有一个包含自定义对象的NSArray,例如:
[A, A, B, C, A, D, E, B, D]
分组这些项目的最佳方法是什么,最终结果类似于此?
A: 3
B: 2
C: 1
D: 2
E: 1
Run Code Online (Sandbox Code Playgroud)
请注意,重复项是具有相同属性的所有不同实例,但我已isEqual:为此重写.
最简单的方法可能是使用NSCountedSet.您可以使用[NSCountedSet setWithArray:myArray]生成数组的计数集,然后可以迭代集的内容以查找集中每个对象的计数.请注意,它不会被排序.
另请注意,您需要提供一个合理的实现方式-hash,因为您只是说你覆盖了-isEqual:.-compare:如果需要排序的结果列表,还需要覆盖.
这是一个快速方法,它接受您的数组并打印每个元素的计数,排序:
void printCountOfElementsInArray(NSArray *ary) {
NSCountedSet *set = [NSCountedSet setWithArray:ary];
NSArray *objs = [[set allObjects] sortedArrayUsingSelector:@selector(compare:)];
for (id obj in objs) {
NSLog(@"%@: %d", obj, [set countForObject:obj]);
}
}
Run Code Online (Sandbox Code Playgroud)
使用该NSCountedSet课程.
NSCountedSet *countedSet = [[NSCountedSet alloc] initWithArray:myArray];
NSUInteger countForA = [countedSet countForObject:@"A"];
NSLog(@"A: %u", countForA);
Run Code Online (Sandbox Code Playgroud)