我想遍历 NSArray 的整数并将每个整数与特定的整数进行比较。所有的整数都是 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
}
}
但是,在将 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
}
}
由于(系统优化的)快速枚举,这里的速度更快:
-(int)ladderCalc:(NSArray *)amounts:(int)amount
{
int result;
for (NSNumber *amount in amounts) {
if (amount < [amount intValue]) {
// do something
}
// do something
}
}
由于并发执行,一个比前一个更快:
-(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
}];
}
警告:由于并发性,最后一个版本要求您的//do something
彼此不依赖。
关于objective-c - 使用 NSArray 进行 C 类型的 int 比较,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8130472/