【发布时间】:2012-08-20 14:10:33
【问题描述】:
考虑以下语句:
for (NSString *string in anArray) {
NSLog(@"%@", string);
}
如何在不使用传统的for 循环并且不检查string 的值的情况下在anArray 中获取string 的索引?
【问题讨论】:
标签: ios objective-c for-loop nsarray
考虑以下语句:
for (NSString *string in anArray) {
NSLog(@"%@", string);
}
如何在不使用传统的for 循环并且不检查string 的值的情况下在anArray 中获取string 的索引?
【问题讨论】:
标签: ios objective-c for-loop nsarray
数组保证按对象顺序迭代。所以:
NSUInteger index = 0;
for(NSString *string in anArray)
{
NSLog(@"%@ is at index %d", string, index);
index++;
}
或者,使用块枚举器:
[anArray
enumerateObjectsUsingBlock:
^(NSString *string, NSUInteger index, BOOL *stop)
{
NSLog(@"%@ is at index %d", string, index);
}];
【讨论】:
试试这个。
for (NSString *string in anArray)
{
NSUInteger index = [anArray indexOfObject:string];
}
【讨论】:
- indexOfObject 是一个O(n) 操作,所以这个算法是O(n^2)。这比在每次迭代中增加索引或使用- enumerateObjectsUsingBlock: 更糟糕,这两者仍然是O(n)。
anArray 包含重复元素,则重复元素的index 将不正确。