Iphone 阵列元素的优雅计算

Iphone 阵列元素的优雅计算,iphone,objective-c,math,sorting,nsmutablearray,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 addO

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

假设我的数组很简单,如下所示:

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到10之间,那么您应该有一个由11个元素组成的数组,名为
counts
。数组中的第i个元素是
i
在原始数组中出现的次数。填充
count
数组很简单:通过初始数组(
a
)的单个循环,每次迭代增量
counts[a[i]]


数字
i
自身重复
计数[i]
次。否如果的:)

不确定这在您的心目中是否算是优雅的,但您始终可以将NSMutableArray子类化,以添加代码,在添加/删除特定数字时对其出现次数进行计数。NSMutableArray的文档中说,很少有很好的理由将其子类化,但它确实给出了一些可能有意义的示例,包括以下示例:

获取有关集合发生了什么的更多信息(例如,统计数据收集)


我会把你所做的事情看作是一种统计收集的形式,不是吗?< P > >你不必自己循环,如果你只想知道每个对象出现了多少次。这一点非常简单:

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];

没有“优雅而聪明”的方法可以做到这一点。您几乎只需循环并计数。数组中预期的数字范围是多少?有固定的射程吗?您的阵列中可以有多少个不同的数字?有什么限制吗?整数是什么(即范围)有什么限制吗?或者它只是一个正整数还是负整数?我想找一些通用的东西,但简单一点:数字是0到10,数组计数中最多10个数字。我不相信有什么完美的解决方案,我们只需要找到它;)-如果你要在if语句中呈现一个很长很难看的if,那就不要了,我可以自己做(并且整天感觉脏和愚蠢…@ShiShi一个很短的方法:
NSUInteger count=[[NSCountedSet setWithArray:array]countForObject:[NSNumber numberwhithint:2]]是的,当涉及到统计和收集时,子类看起来像是一个多余的东西。如果你想要一些可重用的东西,并封装你的代码以便于阅读,我不会考虑子分类“过多”。当然,Dave DeLong仍然在那里发布了一个非常好的。我需要看看它对一大组数字的效果如何,尽管它看起来很好,但我希望你对此感兴趣,你能详细说明一下,也许用一些示例代码吗?@石狮:我不知道objective-c,所以我不能提供一个代码示例。算法的哪一部分你没有完全理解?不,我想我明白了,即使有一个“如果”,它也是优雅的。)我将利用这个想法,发布一个工作代码,假设我让它工作(objective-c),让其他人看到/学习。同样谢谢你,我已经喜欢这个主意了。这很优雅,现在我知道我为什么喜欢Objective-c了!很抱歉问一下,我们在上面的代码中没有发布版本吗?@石狮你需要发布
数组
计数
,当你不再需要它们时,或者你可以使用方便的构造函数来创建它们。当然,只是想给其他人一个清晰的答案。还是谢谢你。@ShiShi罚款罚款罚款罚款….;)虽然如果您是为GC或ARC编译,但是
release
语句是不必要的。