Ios 在数组中搜索字符串
我试图实现的是在数组中搜索字符串,下面是搜索数组的代码Ios 在数组中搜索字符串,ios,Ios,我试图实现的是在数组中搜索字符串,下面是搜索数组的代码 if ([EssentialsArray containsObject:imageFilePath]) { NSLog(@"YES"); } else { NSLog(@"NO"); NSLog(@"%@", ImageFilePath); NSLog(@"%@", EssentialsArray); } NSLogs为imageFileP
if ([EssentialsArray containsObject:imageFilePath]) {
NSLog(@"YES");
}
else {
NSLog(@"NO");
NSLog(@"%@", ImageFilePath);
NSLog(@"%@", EssentialsArray);
}
NSLogs为imageFilePath返回以下内容:
/var/mobile/Applications/5051DC84-CAC8-4C1D-841D-5539A1E28CB1/Documents/12242012_11025125_image.jpg
对于EssentialsArray,这是:
(
{
EssentialImage = "/var/mobile/Applications/5051DC84-CAC8-4C1D-841D-5539A1E28CB1/Documents/12242012_11025125_image.jpg";
}
)
很明显,它们返回一个“NO”值,因为数组找不到字符串。
提前感谢问题是调用
[EssentialsArray containsObject:imageFilePath]
显然假定EssentialsArray
是字符串数组,而不是字符串数组。它是一个字典条目数组,有一个键,EssentialImage
至少有两种解决方案。第一种方法是为那些键为EssentialImage
的字典条目创建一个字符串数组:
NSArray *essentialImages = [essentialsArray valueForKey:@"EssentialImage"];
if ([essentialImages containsObject:imagePath])
NSLog(@"YES");
else
NSLog(@"NO");
根据essentialsArray
的大小(请注意,惯例规定变量总是以小写字母开头),创建数组只是为了执行containsObject
,这似乎有点浪费,但它是有效的
其次,在我看来,更好的方法是使用快速枚举来遍历字典条目数组,寻找匹配项。为此,请定义一个方法:
- (BOOL)arrayOfDictionaries:(NSArray *)array
hasDictionaryWithKey:(id)key
andStringValue:(NSString *)value
{
for (NSDictionary *dictionary in array) {
if ([dictionary[key] isEqualToString:value]) {
return YES;
}
}
return NO;
}
现在,您可以检查字典数组是否有一个名为@“EssentialImage”
的键,该键的字符串值等于imagePath
if ([self arrayOfDictionaries:essentialsArray
hasDictionaryWithKey:@"EssentialImage"
andStringValue:imagePath])
NSLog(@"YES");
else
NSLog(@"NO");
更新: 您还可以使用:
问题是调用
[EssentialsArray containsObject:imageFilePath]
显然假定EssentialsArray
是字符串数组,而不是字符串数组。它是一个字典条目数组,有一个键,EssentialImage
至少有两种解决方案。第一种方法是为那些键为EssentialImage
的字典条目创建一个字符串数组:
NSArray *essentialImages = [essentialsArray valueForKey:@"EssentialImage"];
if ([essentialImages containsObject:imagePath])
NSLog(@"YES");
else
NSLog(@"NO");
根据essentialsArray
的大小(请注意,惯例规定变量总是以小写字母开头),创建数组只是为了执行containsObject
,这似乎有点浪费,但它是有效的
其次,在我看来,更好的方法是使用快速枚举来遍历字典条目数组,寻找匹配项。为此,请定义一个方法:
- (BOOL)arrayOfDictionaries:(NSArray *)array
hasDictionaryWithKey:(id)key
andStringValue:(NSString *)value
{
for (NSDictionary *dictionary in array) {
if ([dictionary[key] isEqualToString:value]) {
return YES;
}
}
return NO;
}
现在,您可以检查字典数组是否有一个名为@“EssentialImage”
的键,该键的字符串值等于imagePath
if ([self arrayOfDictionaries:essentialsArray
hasDictionaryWithKey:@"EssentialImage"
andStringValue:imagePath])
NSLog(@"YES");
else
NSLog(@"NO");
更新: 您还可以使用:
您没有指定数组类型,但这是否与@cppl相同?请指定数组类型,谢谢,这与我的问题相同,并解决了我的问题。不知道为什么在我的搜索中没有出现。Cheers@cppl,它不是那个的复制品。这看起来是另一个问题。这里的问题是对象是字典,他正在尝试检查字符串。@ACB ok。。。嗯,我想Duck从我的评论中得到了一些价值。是的,我只是很快浏览了这篇文章,没有仔细阅读。不幸的是,cppl是对的,那篇文章不一样。我仍然很感谢你的帮助。你没有指定你的数组类型,但是这不就是@cppl完全忘记指定数组类型了吗?谢谢,这和我所问的一样,解决了我的问题。不知道为什么在我的搜索中没有出现。Cheers@cppl,它不是那个的复制品。这看起来是另一个问题。这里的问题是对象是字典,他正在尝试检查字符串。@ACB ok。。。嗯,我想Duck从我的评论中得到了一些价值。是的,我只是很快浏览了这篇文章,没有仔细阅读。不幸的是,cppl是对的,那篇文章不一样。我仍然感谢你的帮助。也感谢你花时间解释它是如何工作的。也感谢你花时间解释它是如何工作的。