我有一个包含自定义对象的NSArray,例如:
[A, A, B, C, A, D, E, B, D]
对这些项目进行分组的最佳方法是什么,以便最终结果类似于此?
A: 3
B: 2
C: 1
D: 2
E: 1
请注意,重复项是具有相同属性的所有不同实例,但我为此重写了isEqual:
。
答案 0 :(得分:8)
最简单的方法可能是使用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]);
}
}
答案 1 :(得分:7)
使用NSCountedSet
类。
NSCountedSet *countedSet = [[NSCountedSet alloc] initWithArray:myArray];
NSUInteger countForA = [countedSet countForObject:@"A"];
NSLog(@"A: %u", countForA);