如何检查在字典中的关键是相同的方法参数字符串? 即在下面的代码,dictobj是的NSMutableDictionary的对象,并为每个dictobj关键,我需要用绳子比较。 如何实现这一目标? 我应该典型案例关键的NSString?
-(void)CheckKeyWithString:(NSString *)string
{
//foreach key in NSMutableDictionary
for(id key in dictobj)
{
//Check if key is equal to string
if(key == string)// this is wrong since key is of type id and string is of NSString,Control doesn't come into this line
{
//do some operation
}
}
}
当您使用==
操作符,你是比较指针值。 这时候您比较的对象是完全一样的对象只会工作,在相同的内存地址。 例如,该代码将返回These objects are different
,因为虽然字符串是相同的,它们被存放在存储器的不同位置:
NSString* foo = @"Foo";
NSString* bar = [NSString stringWithFormat:@"%@",foo];
if(foo == bar)
NSLog(@"These objects are the same");
else
NSLog(@"These objects are different");
当你比较字符串,你通常希望将字符串,而不是他们的指针的文字内容比较,所以你应该-isEqualToString:
方法NSString
。 此代码将返回These strings are the same
,因为它比较字符串对象,而不是他们的指针值的值:
NSString* foo = @"Foo";
NSString* bar = [NSString stringWithFormat:@"%@",foo];
if([foo isEqualToString:bar])
NSLog(@"These strings are the same");
else
NSLog(@"These string are different");
为了比较随意Objective-C的对象,你应该使用更一般的isEqual:
的方法NSObject
。 -isEqualToString:
是的优化版本-isEqual:
当你知道这两个对象,你应该使用NSString
对象。
- (void)CheckKeyWithString:(NSString *)string
{
//foreach key in NSMutableDictionary
for(id key in dictobj)
{
//Check if key is equal to string
if([key isEqual:string])
{
//do some operation
}
}
}