在数组中搜索字符串

时间:2012-12-24 00:13:25

标签: ios

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

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

1 个答案:

答案 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];