2013-02-22 95 views
22

我有一个包含字典对象的数组。在每本字典中,密钥都是常见的。现在我想要获得该密钥的所有值。我已经通过迭代得到了这些值,但我正在寻找一些简单的方法或执行此项工作的默认方法。如何从NSArray中的每个NSDictionary获取特定键的所有值?

能否请你帮我弄供应的目的,一个默认的方法是什么?谢谢。

数据结构是这样的:

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

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

这可能吗?

回答

65

有与键 - 值编码一个巧妙的方法,做它:

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将包含单词与原始字典数组中的顺序相同。

+1

非常感谢。有用。它让我的生活变得轻松。再次感谢。 :) – hgpl 2013-02-22 07:44:19

+0

有没有什么办法基于价值 – 2014-10-09 07:12:36

+0

Boosa筛选 - 使用谓词,并返回一个过滤数组 - 数组中 – PruitIgoe 2014-11-23 23:32:42

相关问题