获取数组的大小

| 我有一些代码,需要使用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名称本质上是相同的东西……有什么帮助吗? 干杯。     
已邀请:
        不要使用sizeof。使用
[names count]
。     
        您要使用[名称计数]而不是sizeof名称。 Sizeof将为您提供实际名称对象指针本身的大小,而不是元素的数量,因为它是动态内存类型。     
        要获取存储在ѭ2中的元素数量,您应该使用实例方法
count
,该方法返回returns4ѭ。 另外,如果我没记错的话,可以使用ѭ5,循环遍历这些元素,在Java中也可用。
for (MyClass *element in myArray) {
    NSLog(@\"%@\", element);
}
请注意,ѭ7是一个C运算符,它以字节为单位返回其操作数的大小,因此它不会告诉您在那个
NSArray
中存储了多少个元素,而是一个NSArray实例的字节大小。     
        我知道您的问题已经得到解答-但是这是一种更可可的书写方式
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;
}
    
        也可以使用快速枚举,在某些情况下,读者可以更清楚地了解它:
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;
}
    

要回复问题请先登录注册