-1

次のような配列:

    <array>
      <dict>
        <key>Place</key>
        <string>A</string>
        <key>Name</key>
        <string>B</string>
        <key>Object</key>
        <string>C</string>
      </dict>
      <dict>
        <key>Place</key>
        <string>D</string>
        <key>Name</key>
        <string>E</string>
        <key>Object</key>
        <string>F</string>
      </dict>
      <dict>
        <key>Place</key>
        <string>X</string>
        <key>Name</key>
        <string>Y</string>
        <key>Object</key>
        <string>Z</string>
      </dict>
      <dict>
        <key>Place</key>
        <string>S</string>
        <key>Name</key>
        <string>T</string>
        <key>Object</key>
        <string>U</string>
      </dict>
      ...
    </array>

// 何らかの理由で、元の最上位配列を削除して、このサンプルのレベルを単純化しました。現在、それらはいくつかの辞書で構成される配列のように見えます。

たとえば、[[objectArray objectAtIndex:i] valueForKey:@"Place"]X のように、を介して任意の値を取得できます。

次に、同じ場所の別の場所で、 Xのみを活用して、X が存在する辞書のインデックスを逆に取得する.m必要があります。この場所では、objectArray のみにアクセスできるためです。

行うべき正しい方法は何ですか?

4

2 に答える 2

8

KVCを再び使用してください!

配列がある場合は3行:D

短い

NSArray *arrayWithDicts = @[d1,d2,d3,d4];//your array!

NSArray *arrayWithPlaces = [arrayWithDicts valueForKey:@"Place"];
NSUInteger index = [arrayWithPlaces indexOfObject:@"cologne"];
NSDictionary *dict = index != NSNotFound ? arrayWithDicts[index] : nil;

完全な例

#import <Foundation/Foundation.h>

int main(int argc, char *argv[]) {
    @autoreleasepool {
        //build demo array
        NSDictionary *d1 = @{@"Place": @"clackson"};
        NSDictionary *d2 = @{@"Place": @"berlin"};
        NSDictionary *d3 = @{@"Place": @"cologne"};
        NSDictionary *d4 = @{@"Place": @"mclean"};
        NSArray *arrayWithDicts = @[d1,d2,d3,d4];

        //get all places
        NSArray *arrayWithPlaces = [arrayWithDicts valueForKey:@"Place"];
        assert(arrayWithDicts.count == arrayWithPlaces.count);

        //find place and get dict
        NSUInteger index = [arrayWithPlaces indexOfObject:@"cologne"];
        NSDictionary *dict = index != NSNotFound ? arrayWithDicts[index] : nil;

        NSLog(@"%@", dict);     
    }
}
于 2013-09-27T00:17:18.407 に答える