如何从NSArray中的每个NSDictionary获取特定键的所有值?

时间:2013-02-22 06:15:57

标签: objective-c nsarray nsdictionary key-value-coding

我有一个包含字典对象的数组。在每个字典中,密钥是常见的。现在我想获得该密钥的所有值。我已经通过迭代得到了这些值,但我正在寻找一些直接的方法或一个默认的方法来完成这项工作。

你能帮我一个默认的方法来达到目的吗?感谢。

数据结构是这样的:

<array>
    <dict>
        <key>Match</key>
        <string>Football</string>
        <key>Stadium</key>
        <string>XXXXX</string>
    </dict>
    <dict>
        <key>Match</key>
        <string>HOCKY</string>
        <key>Stadium</key>
        <string>XXXXX</string>
    </dict>
 </array>

我现在正在这样做:

NSMutableArray * matches = [[NSMutableArray alloc] init];
        for (int i = 0; i< myArray.count; i++){
            [matches insertObject:[[myArray objectAtIndex:i] objectForKey:@"Match"] atIndex:i];
        }
        [matchDataArray addObjectsFromArray:matches];

它给了我正确的答案。但我不想做这个迭代。我想要一个方法,它将从数组的所有索引返回“匹配”键的所有值,并立即保存在另一个数组中。新创建的数组将只包含来自所有数组索引的Match键值。

这可能吗?

1 个答案:

答案 0 :(得分:67)

关键值编码有一个巧妙的技巧:

NSArray *matches = [myArray valueForKey: @"Match"];

以下是一个实例:

NSArray *anArray = @[
                      @{@"aWord" : @"I"},
                      @{@"aWord" : @"have"},
                      @{@"aWord" : @"an"},
                      @{@"aWord" : @"array"},
                      @{@"aWord" : @"which"},
                      @{@"aWord" : @"contains"},
                      @{@"aWord" : @"dictionary"},
                      @{@"aWord" : @"objects."},
                      @{@"aWord" : @"Etc."},
                      ];

NSArray *aWordArray = [anArray valueForKey:@"aWord"];

在最后一行之后,aWordArray将包含与原始词典数组中相同顺序的单词。