web-dev-qa-db-ja.com

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

正解です。しかし、私はこの反復を行いたくありません。配列のすべてのインデックスから「Match」キーのすべての値を返し、一度に別の配列に保存するメソッドが必要です。新しく作成された配列には、配列のすべてのインデックスのMatchキーの値のみが含まれます。

これは可能ですか??

24
hgpl

それを行うキー値コーディングにはきちんとしたトリックがあります:

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には、辞書の元の配列と同じ順序で単語が含まれます。

67
Monolo