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)
我不确定为什么上面的代码无法正常工作,但您尝试过:
if ([ALPHA_ARRAY containsObject:aString])
Run Code Online (Sandbox Code Playgroud)
如果aString存在则返回YES,否则返回NO
#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)