【问题标题】:Searching an array for a string在数组中搜索字符串
【发布时间】:2012-12-24 00:13:24
【问题描述】:

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

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

【问题讨论】:

  • 你没有指定你的数组类型,但这和stackoverflow.com/questions/1853801/…不一样
  • @cppl 完全忘记了指定数组类型,感谢这与我的要求相同并解决了我的问题。不知道为什么它没有出现在我的搜索中。干杯
  • @cppl,这不是重复的。这看起来像一个不同的问题。这里的问题是对象是字典,他正在尝试检查字符串。
  • @ACB 好的...我猜 Duck 从我的评论中得到了一些价值。
  • 是的,我只是快速浏览了帖子,没有仔细阅读。不幸的是 cppl 是对的,而且那个帖子不一样。我仍然感谢任何帮助。

标签: ios


【解决方案1】:

问题是[EssentialsArray containsObject:imageFilePath] 的调用清楚地假定EssentialsArray 是一个字符串数组,而它不是。这是一个字典条目数组,只有一个键,EssentialImage

至少有两种解决方案。首先是为那些key为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];

【讨论】:

  • 也感谢您花时间解释它是如何工作的。
猜你喜欢
  • 2011-07-04
  • 2023-03-13
  • 2011-07-22
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多