我在Objective C中有一个二维NSArray。
我想知道数组中的项目总数。 如果不使用嵌套的for循环,是否有更快的方法来获得项目的总数?
谢谢!
答案 0 :(得分:11)
是的,您可以执行此键值编码和the collection operators:
NSArray *nested = @[@[@1, @2, @3], @[@4, @5, @6], @[@7, @8, @9],
@[@10, @11, @12], @[@13, @14, @15], @[@16, @17, @18],
@[@19, @20, @21], @[@22, @23, @24]];
NSLog(@"%@", [nested valueForKeyPath:@"@sum.@count"]); // logs 24 (as an NSNumber)
几条评论:
关键路径@sum.@count
首先创建一个计数数组(所以@[@3, @3, @3, @3, @3, @3, @3, @3]
),然后对该数组求和(给@24
)。
然而,在你编写更少代码的意义上,这只是“更快”。从根本上说,它仍然在做你自己做的事情。它可能效率较低,因为它处理NSNumbers
的添加,这不如添加原语(你可能会使用它)那样有效。
这真的要难得多:
NSUInteger total = 0;
for (NSArray *array in nested) {
total += array.count;
}