And*_*nov 1 c objective-c nsarray ios
我想迭代一个整数的NSArray并将每一个与特定的int进行比较.所有整数都是C类型的整数.
我使用的代码如下:
-(int)ladderCalc: (NSArray*)amounts: (int)amount
{
int result;
for (NSUInteger i=0; i< [amounts count]; i++)
{
if (amount < [amounts objectAtIndex:i]);
{
// do something
}
// do something
}
}
Run Code Online (Sandbox Code Playgroud)
但是,在将int amount与结果进行比较时出现错误,[amounts objectAtIndex:i]因为您无法将id与int进行比较.为什么这个案件涉及id?不应该objectAtIndex只是在指定的索引处返回对象吗?是否可以将返回的对象强制转换为C int然后进行比较?
或者我应该免除NSArray并在C中做这种类型的事情?
你intValue在那里错过了一个调用(假设你的数组包含实例NSNumber,这是公平的假设).
同样为了表现,你可能只想打[amounts count]一次,就像这样:
-(int)ladderCalc:(NSArray *)amounts:(int)amount
{
int result;
NSUInteger amountCount = [amounts count];
for (NSUInteger i = 0; i < amountCount; i++)
{
if (amount < [[amounts objectAtIndex:i] intValue]);
{
// do something
}
// do something
}
}
Run Code Online (Sandbox Code Playgroud)
由于(系统优化的)快速枚举,这里的速度更快:
-(int)ladderCalc:(NSArray *)amounts:(int)amount
{
int result;
for (NSNumber *amount in amounts) {
if (amount < [amount intValue]) {
// do something
}
// do something
}
}
Run Code Online (Sandbox Code Playgroud)
由于并发执行,其中一个比前一个更快:
-(int)ladderCalc:(NSArray *)amounts:(int)amount
{
int result;
[amounts enumerateObjectsWithOptions:NSEnumerationConcurrent usingBlock:^(NSNumber *amount, NSUInteger idx, BOOL *stop) {
if (amount < [amount intValue]) {
// do something
}
// do something
}];
}
Run Code Online (Sandbox Code Playgroud)
注意事项:// do something由于并发性,最后一个版本要求你的s不依赖于彼此.