2010-08-31 136 views

回答

6

遍历数组并计算你正在寻找的东西。

假设你有填充NSNumber秒的NSArray

NSArray* array = ... ; // populate array 
NSUInteger count = 0; 
for (NSNumber* number in array) 
{ 
    if ([number intValue] == 0) 
    { 
     count++; 
    } 
} 
1

声明一个计数器,将其设置为0,循环遍历数组,如果元素为0,则递增计数器。

+0

打我45s - 但我贴的代码:) – 2010-08-31 23:16:03

4

有点变态的解决方案:)

NSUInteger zeros_count(NSArray *array) { 
    NSUInteger sum = 0; 
    for (NSNumber *number in array) 
    sum += [number intValue]; 
    return [array count] - sum; 
} 
+1

我喜欢它。我想用它来混淆我的同事们的想法。 – 2010-09-01 00:00:07

9

根据您的应用程序,你可能会考虑使用NSCountedSet

当需要获取特定类型对象的计数时,可以使用countForObject:instance方法。

对于您目前的问题,可能有点过重,但可能对寻求类似解决方案的其他人有用。

+5

这正是NSCountedSet的用途。你可以用'[[NSCountedSet alloc] initWithArray:array]'从一个数组中创建一个' - 然后你可以问它数组中的任何对象的数量。 – Chuck 2010-08-31 23:32:45

0
NSArray* array = [[NSArray alloc] ...]; ; // put data into the array 

NSUInteger arrayWithValue = 0; 

for (NSNumber* number in array) 

{ 

if ([number intValue] == NUMBERYOUARELOOKINGFOR) 

    { 
     count++; 
    } 
} 
+0

谢谢戴夫!我错过了 :/ – OOProg 2010-09-01 21:40:16

4

KeyValueCoding

int count = [array count] - [[array valueForKeyPath:@"@sum.intValue"] intValue]; 
0
NSArray *arrayWithOnesAndZeros = @[@0, @0, @1, @1, @0, @1, @1, @0, @1]; 
NSUInteger numberOfZeros = [[NSCountedSet setWithArray:arrayWithOnesAndZeros]countForObject:@0]; 

这是你在运行一个完美的方法,知道得很少,你要计算的对象,所以不是@0你可以把anyKindOfObjectWithUnknownValueOrType有代替。

相关问题