1

我想要实现的是在数组中搜索字符串,这是搜索数组的代码

    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”值,因为数组找不到字符串。提前致谢

4

1 回答 1

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");

更新:

您还可以使用谓词

NSPredicate *predicate = [NSPredicate predicateWithFormat:@"EssentialImage contains %@", imagePath];

BOOL found = [predicate evaluateWithObject:array];
于 2012-12-24T02:36:11.020 回答