优雅的数组元素计算

时间:2011-08-29 15:45:39

标签: iphone objective-c math sorting nsmutablearray

我想在我的数组中进行一些计算和比较

假设我的数组很简单:

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次。 (寻找聪明而有活力的东西......)

3 个答案:

答案 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的文档说很少有理由对它进行子类化,但它确实给出了它可能有意义的例子,包括这个:

  

获取有关集合发生情况的更多信息(例如,统计信息收集)。

我会考虑你正在做什么作为一种统计数据收集,不是吗?