我想要实现的是搜索数组中的字符串,这是搜索数组的代码
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”值,因为数组找不到字符串。 提前致谢
答案 0 :(得分:4)
问题是[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");
更新
您还可以使用predicates:
NSPredicate *predicate = [NSPredicate predicateWithFormat:@"EssentialImage contains %@", imagePath];
BOOL found = [predicate evaluateWithObject:array];