匹配多个 NSArray 中的多个字符串

发布于 2024-11-01 23:25:34 字数 2443 浏览 4 评论 0原文

我需要通过将 XML 元素中的字符串与另一个 NSArray 中的字符串列表进行匹配来从 XML 的 NSArray 中选择故事

XML 包含故事,每个故事都有三个条件,例如“水果”、“蔬菜”、“香料”,每个包含一个短语。示例故事可能如下所示:

<story>
    <title>I love cooking</title>
    <fruit>Oranges</fruit>
    <veg>Cauliflower</veg>
    <spice>Mixed spice</spice>
    <blurb>losts of text and stuff....</blurb>
</story>

我在从 pList 生成的 NSMutableDictionary 中有三个键/值对字典,

<Fruit:dictionary>
    'Ripe bananas' : 1
    'Green bananas' : 0
<Veg:dictionary>
    'Green beans' : 1
    'Cauliflower' : 0
<Spice:dictionary>
    'Nutmeg' : 1
    'Mixed spice' : 0

我不知道键是什么,并且我需要将故事中的标签与键进行匹配。

即故事水果标签:“成熟的香蕉”与水果键列表中的“成熟的香蕉”匹配

我可以使用循环遍历故事 XML 来构建三个键数组,

NSMutableDictionary *fruitTagsDict = [prefsDictionary objectForKey:@"Fruits"];
NSArray *fruitTags = [fruitTagsDict allKeys];

提取标签

for (id myArrayElement in storyArray) {
    NSString *fruitString = [NSString stringWithString:[myArrayElement fruit]];
    //BOOL isTheObjectThere = [issueTags containsObject:fruitString];

    NSString *vegString = [NSString stringWithString:[myArrayElement veg]];

    NSString *spiceString = [NSString stringWithString:[myArrayElement spice]];

    //if ([[fruitTags objectAtIndex:row] isEqualToString:fruitString]) {
    //NSLog(@"Yo %@", fruitString);
            // ADD TO A NEW ARRAY OF MATCHING STORIES
    //}
        // Fails because row is undeclared
}

然后我开始茫然。

isTheObjectThere 行产生 nil 然后在

我查看过的循环结束时崩溃: 根据多个键从 NSArray 中过滤整个 NSDictionaries 让代码检查文本框中的文本是否与 NSArray 中的任何字符串匹配

似乎谓词就是答案,但坦率地说,我感到困惑。

我需要在元代码中做什么

repeat with stories
    if storyFruitTag is in fruitTagArray 
    OR storyVegTag is in vegTagArray 
    OR storySpiceTag is in spiceTagArray
        Add to new array of matching stories

希望我已经解释得足够多以获得一些指针,我研究了 NSMutableSet 和 Intersect (Xcode:比较两个 NSMutableArrays)但是太多信息的力量让我着迷

I need to select stories from a NSArray of XML by matching a string from an XML element against a list of strings in another NSArray

The XML contains stories, each story has three criteria, say 'Fruit', 'Veg', 'Spice', each containing a single phrase. A sample story might look like:

<story>
    <title>I love cooking</title>
    <fruit>Oranges</fruit>
    <veg>Cauliflower</veg>
    <spice>Mixed spice</spice>
    <blurb>losts of text and stuff....</blurb>
</story>

I have three dictionaries of key/value pairs in a NSMutableDictionary generated from a pList

<Fruit:dictionary>
    'Ripe bananas' : 1
    'Green bananas' : 0
<Veg:dictionary>
    'Green beans' : 1
    'Cauliflower' : 0
<Spice:dictionary>
    'Nutmeg' : 1
    'Mixed spice' : 0

I don't know what the keys will be, and I need to match the tag in the story against the keys.

i.e. story fruit tag:'Ripe bananas' MATCHES 'Ripe bananas' in list of fruit keys

I can build three arrays of the keys using

NSMutableDictionary *fruitTagsDict = [prefsDictionary objectForKey:@"Fruits"];
NSArray *fruitTags = [fruitTagsDict allKeys];

I loop through the story XML extracting a tag

for (id myArrayElement in storyArray) {
    NSString *fruitString = [NSString stringWithString:[myArrayElement fruit]];
    //BOOL isTheObjectThere = [issueTags containsObject:fruitString];

    NSString *vegString = [NSString stringWithString:[myArrayElement veg]];

    NSString *spiceString = [NSString stringWithString:[myArrayElement spice]];

    //if ([[fruitTags objectAtIndex:row] isEqualToString:fruitString]) {
    //NSLog(@"Yo %@", fruitString);
            // ADD TO A NEW ARRAY OF MATCHING STORIES
    //}
        // Fails because row is undeclared
}

Then I start to glaze out.

The isTheObjectThere line produces nil then crashes at end of loop

I've looked at:
Filter entire NSDictionaries out of NSArray based on multiple keys
Making the Code check to see if the Text in a Text box matches any of the Strings in an NSArray

It seems predicate is the answer but frankly I getting confused.

What I need to do in metacode

repeat with stories
    if storyFruitTag is in fruitTagArray 
    OR storyVegTag is in vegTagArray 
    OR storySpiceTag is in spiceTagArray
        Add to new array of matching stories

Hopefully I've explained enough to get some pointers, I looked into NSMutableSet and Intersect (Xcode: Compare two NSMutableArrays) but the power of too much information got to me

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(1

浊酒尽余欢 2024-11-08 23:25:34

这是使用关键路径确定是否存在匹配的简单方法:

 if ([prefsDict valueForKeyPath:[NSString stringWithFormat:@"Fruit.%@", storyFruitTag]] ||
     [prefsDict valueForKeyPath:[NSString stringWithFormat:@"Veg.%@", storyVegTag]] ||
     [prefsDict valueForKeyPath:[NSString stringWithFormat:@"Spice.%@", storySpiceTag]]) {
       // one of the story's tags matches a key in one of the corresponding dictionaries
   }

Here's a simple way to determine whether there are matches using key paths:

 if ([prefsDict valueForKeyPath:[NSString stringWithFormat:@"Fruit.%@", storyFruitTag]] ||
     [prefsDict valueForKeyPath:[NSString stringWithFormat:@"Veg.%@", storyVegTag]] ||
     [prefsDict valueForKeyPath:[NSString stringWithFormat:@"Spice.%@", storySpiceTag]]) {
       // one of the story's tags matches a key in one of the corresponding dictionaries
   }
~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文