计数id <nsfastenumeration> </nsfastenumeration>中的元素

时间:2010-08-04 08:14:27

标签: objective-c cocoa enumeration

我有一个id<NSFastEnumeration>个对象。我想计算对象内的元素。怎么能实现呢?

NSFastEnumeration实现的唯一方法是:

- (NSUInteger)countByEnumeratingWithState:(NSFastEnumerationState *)state objects:(id *)stackbuf count:(NSUInteger)len

此方法返回我正在寻找的计数,但因为我不想真正枚举我想知道的对象,我可以安全地传入作为参数。通过nil,nil,0可以吗?如果没有,我应该通过什么?

背景:

我想创建一个函数返回值的NSArray,我想用给定集合中的每个元素调用它。我想要一个枚举带函数的集合的结果数组。

id<NSFastEnumeration> enumeratable = someObject;
NSMutableArray* results = [NSMutableArray arrayWithCapacity:(#Fill in count here#)];
for (id object in enumeratable) {
    [results addObject:callFunctionOnObject(object)];
}

如您所见,我只需要计数来优化阵列初始化。我很清楚我可以使用NSMutableArray* results = [NSMutableArray array];代替。

1 个答案:

答案 0 :(得分:2)

从NSFastEnumeration获取长度的唯一方法是遍历它。

int count = 0;
for (id x in enumerator)
  ++ count;
return count;

当然这意味着enumerator将耗尽,您无法再次循环。

此外,容量只是一个提示。设置它没什么好处。