Получить ключ из словаря объекта? - PullRequest
3 голосов
/ 02 января 2011

У меня есть словарь, подобный приведенному ниже. Как я могу получить фактическое значение ключа (имя актера) от objectAtIndex:1?

<plist version="1.0">
<dict>
    <key>Brad Pitt</key>
    <array>
        <string>Fight Club</string>
        <string>Seven</string>
        <string>Inglorious Basterds</string>
        <string>Babel</string>
    </array>
    <key>Meryl Streep</key>
    <array>
        <string>Adaptation</string>
        <string>The Devil Wears Prada</string>
        <string>Doubt</string>
        <string>Julie &amp; Julia</string>
    </array>
    <key>Chris Cooper</key>
    <array>
        <string>Adaptation</string>
        <string>American Beauty</string>
        <string>The Bourne Identity</string>
        <string>October Sky</string>
    </array>
</dict>
</plist>

Ответы [ 3 ]

5 голосов
/ 02 января 2011

Грубая сила это:

- (NSString *)actorForFilm:(NSString *)film {
    NSDictionary * dictionary = ...; //your dictionary as read from the plist
    for (NSString * actorName in dictionary) {
        NSArray * films = [dictionary objectForKey:actorName];
        if ([films containsObject:film]) {
            return actorName;
        }
    }
    return nil;
}

Если вы хотите вернуть случайный ключ из словаря, вы можете сделать:

NSArray * allKeys = [dictionary allKeys];
NSString * randomKey = [allKeys objectAtIndex:(arc4random() % [allKeys count])];
1 голос
/ 02 января 2011

Я думаю, вы ищете что-то подобное?

NSString *actorName = [[actorsDictionary allKeys] objectAtIndex:index];
1 голос
/ 02 января 2011

Словари не упорядочены, поэтому в классе NSDictionary нет метода objectAtIndex:. Если вы хотите сохранить пары актер / фильм в упорядоченном списке, вам нужно сохранить их в NSArray, например, используя такую ​​структуру:

# pseudo-code: [] = array, {} = dictionary
[
    { actor: "Brad Pitt", movies: ["Fight Club", "Seven", "Babel"] },
    { actor: "Meryl Streep", movies: ["Adaptation", "Doubt"] },
    # etc...
]
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...