我想在我的数组中进行一些计算和比较
假设我的数组很简单:
NSMutableArray *array;
array = [[NSMutableArray alloc] init];
[array addObject:[NSNumber numberWithInt:1]];
[array addObject:[NSNumber numberWithInt:2]];
[array addObject:[NSNumber numberWithInt:2]];
[array addObject:[NSNumber numberWithInt:3]];
[array addObject:[NSNumber numberWithInt:2]];
什么是优雅和聪明的方式来检查数字是否在此数组中重复2,3,4或5次。 (寻找聪明而有活力的东西......)
答案 0 :(得分:5)
如果数字仅在0到10的范围内,那么你应该有一个包含11个元素的数组,名为counts
。数组中的i th 元素是原始数组中i
出现的次数。填充count
数组非常简单:在每次迭代增量a
中,通过初始数组(counts[a[i]]
)的单个循环。
i
号重复counts[i]
次。否 if :)
答案 1 :(得分:3)
如果您只是想知道每个对象出现的次数,您不必自己循环。这一点非常简单:
NSMutableArray *array;
array = [[NSMutableArray alloc] init];
[array addObject:[NSNumber numberWithInt:1]];
[array addObject:[NSNumber numberWithInt:2]];
[array addObject:[NSNumber numberWithInt:2]];
[array addObject:[NSNumber numberWithInt:3]];
[array addObject:[NSNumber numberWithInt:2]];
NSCountedSet *counts = [[NSCountedSet alloc] initWithArray:array]
NSLog(@"%d", [counts countForObject:[NSNumber numberWithInt:2]]); // logs 3
[array release];
[counts release];
答案 2 :(得分:1)
不确定这在您的脑海中是否优雅,但您可以始终将NSMutableArray子类化,以添加在添加/删除特定数字时计算出现次数的代码。 NSMutableArray的文档说很少有理由对它进行子类化,但它确实给出了它可能有意义的例子,包括这个:
获取有关集合发生情况的更多信息(例如,统计信息收集)。
我会考虑你正在做什么作为一种统计数据收集,不是吗?