使用NSArray进行C型int比较

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中做这种类型的事情?

Reg*_*ent 6

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不依赖于彼此.