获得数组的大小

时间:2011-06-16 15:34:01

标签: objective-c arrays sizeof

我有一些代码需要使用for循环来读取数组中的变量。

int size=sizeof names;
NSLog(@"thelast one is %d",size);
NSString *usersName=userName.text;
NSString *usersPass=passWord.text;
for (i=0; i<=size;i++){

    NSString *namesArray=[names objectAtIndex:i];
    NSString *passArray=[pass objectAtIndex:i];
    NSLog(@"namesArray %@",namesArray); 
    NSLog(@"passArray %@",passArray); 
    if([namesArray isEqualToString:usersName]){
        userValid=1;
    NSLog(@"The content of arry4 is %@",namesArray);


    }
    if([passArray isEqualToString:usersPass]){
        passValid=1;
        NSLog(@"The content of arry4 is %@",passArray);
    }

    else {
        userValid=0;
        passValid=0;
    }

}

我遇到了一些问题,因为每次从程序中调用此函数时,几乎就像'sizeof names'是错误的,因此不会检查数组中的所有值。 我通常是一个Java程序员,所以我习惯了names.length,我被告知sizeof名称基本上是同样的东西......任何帮助?

干杯。

5 个答案:

答案 0 :(得分:30)

不要使用sizeof。使用[names count]

答案 1 :(得分:3)

您想使用[名称计数]而不是名称大小。 Sizeof将为您提供实际名称对象指针本身的大小,而不是元素的数量,因为它是动态内存类型。

答案 2 :(得分:0)

要获取NSAarray中存储的元素数量,您应该使用实例方法count,该方法返回NSUInteger

另外,如果我没记错的话,你可以使用for in循环遍历这些元素,这个循环也可以在Java中使用。

for (MyClass *element in myArray) {
    NSLog(@"%@", element);
}

请注意,sizeof是一个C运算符,它返回其操作数的字节大小,因此它不会告诉您NSArray中存储了多少元素,而是以字节为单位的大小一个NSArray实例。

答案 3 :(得分:0)

我知道你的问题已经得到了解答 - 但是这里有更多 Cocoa 的写作方式

NSString *userName = userName.text;
NSString *userPass = passWord.text;

// Use a block enumerator
NSUInteger nameIdx = [names indexOfObjectPassingTest:^(id obj, NSUInteger idx, BOOL *stop) {
    return ([obj isEqualToString:userName]);
}];

// Is the name in the array
if (nameIdx == NSNotFound) {
    // Name not in array - so set to zero
    userValid = 0;
    passValid = 0;
} else {
    userValid = 1;
    // See if the corresponding password is correct
    NSString password = [pass objectAtIndex:nameIdx];
    if (![password isEqualToString:userPass]) {
        passValid = 0;
    } else {
        passValid = 1;
}

答案 4 :(得分:0)

也可以使用快速枚举,在某些情况下,读者可以更清楚:

NSString *userName = userName.text;
NSString *userPass = passWord.text;

BOOL userValid = NO;
BOOL passValid = NO;
int index = 0;
for (NSString *eachName in namesArray) {
    if ([eachName isEqualToString:userName) {
        userValid = YES:
        if ([[passArray objextAtIndex:index] isEqualToString:passWord) {
            passValid = YES;
        }
        break;
    }
    index += 1;
}