将字符串与objective-C中的数组进行比较

Sja*_*ien 6 arrays string comparison objective-c

这是一个非常基本的问题,我相信你能够快速回答.请不要嘲笑我的无知.

我有一个字符串,我想与一个字符串数组进行比较.只有当字符串不是数组的一部分时,我才想执行操作.我尝试了以下代码,但不起作用.我明白为什么,但我想不出有办法正确地做到这一点.

请帮助我摆脱痛苦.

提前致谢

Sjakelien

-(void) findRedundant: (NSString *) aString {
#define ALPHA_ARRAY [NSArray arrayWithObjects: @"A", @"B", @"C", nil]   
    NSUInteger f;
    for (f = 0; f < [ALPHA_ARRAY count]; f++) 
    {
        NSString * stringFromArray = [ALPHA_ARRAY objectAtIndex:f];
        if ([aString isEqualToString:stringFromArray]) {
            // do nothing

        } else {
            //do something
        }

    }

}



[self findRedundant:@"D"];
Run Code Online (Sandbox Code Playgroud)

Pet*_*wis 13

您的代码似乎工作正常.它可怕的代码,但它工作正常,//为任何匹配调用什么都不执行的部分和//为数组中的每个不匹配调用一些部分.我怀疑问题在于,如果没有匹配,你希望//什么都不执行的部分执行一次,如果有任何匹配,//做一些部分要执行一次,情况并非如此.你可能想要:

-(void) findRedundant: (NSString *) aString {
#define ALPHA_ARRAY [NSArray arrayWithObjects: @"A", @"B", @"C", nil]
    BOOL found = NO;
    NSUInteger f;
    for (f = 0; f < [ALPHA_ARRAY count]; f++) {
        NSString * stringFromArray = [ALPHA_ARRAY objectAtIndex:f];
        if ([aString isEqualToString:stringFromArray]) {
            found = YES;
            break;
        }
    }
    if ( found ) {
        // do found
    } else {
        // do not found
    }
}
Run Code Online (Sandbox Code Playgroud)

此外,您显然不了解宏,何时应该而且不应该使用它们(通常,您应该永远不要使用它们,除了极少数例外).宏在文本上被替换为您的代码.这意味着每次使用ALPHA_ARRAY 都会发生阵列创建和初始化.这很糟糕.

基本上,永远不要再使用#define(常量除外),直到你对你正在做的事情有更深入的了解.在这种情况下,您将创建数组为taebot描述:

NSArray* alphaArray = [NSArray arrayWithObjects: @"A", @"B", @"C", nil];
Run Code Online (Sandbox Code Playgroud)

接下来,如果您正在开发一个现代平台(10.5或iPhone),您可以使用快速枚举,这更容易和更清晰阅读:

-(void) findRedundant: (NSString *) aString {
    NSArray* alphaArray = [NSArray arrayWithObjects: @"A", @"B", @"C", nil];
    BOOL found = NO;
    for ( NSString* stringFromArray in alphaArray ) {
        if ([aString isEqualToString:stringFromArray]) {
            found = YES;
            break;
        }
    }
    if ( found ) {
        // do found
    } else {
        // do not found
    }
}
Run Code Online (Sandbox Code Playgroud)

最后,你应该通过有关的NSArray和NSString的文档阅读,看看你可以免费做什么,然后你会发现像containsObject方法是KiwiBastard指出,你可以重写你的程序为:

-(void) findRedundant: (NSString *) aString {
    NSArray* alphaArray = [NSArray arrayWithObjects: @"A", @"B", @"C", nil];
    if ( [alphaArray containsObject: aString] ) {
        // do found
    } else {
        // do not found
    }
}
Run Code Online (Sandbox Code Playgroud)


Jam*_*rue 7

我不确定为什么上面的代码无法正常工作,但您尝试过:

if ([ALPHA_ARRAY containsObject:aString]) 
Run Code Online (Sandbox Code Playgroud)

如果aString存在则返回YES,否则返回NO


tea*_*bot 7

#define对我来说很奇怪.我认为每次使用ALPHA_ARRAY时都会创建一个不同的NSArray实例.在NSArray上使用containsObject:方法会更清晰:

NSArray* alphaArray = [NSArray arrayWithObjects: @"A", @"B", @"C", nil];
if (![alphaArray containsObject:aString]) {
    // do something
}
Run Code Online (Sandbox Code Playgroud)