ищет строку с соответствующим значением (или чем-то еще) в файле NSDictionary - PullRequest
0 голосов
/ 21 июля 2009

Я создал NSMutableDictionary с необходимыми строками и идентификаторами
это выглядит примерно так

Root

| |

Ряды

|| - Item1 ( состоит из ключевого упражнения и строки: тестирование + идентификатор ключа и строка: OIK74 )

|| - Item2 ( состоит из ключевого упражнения и строки: testing3 + идентификатор ключа и строка: 424RE)

|| - Item3 (состоит из ключевого упражнения и строки: testing5 + идентификатор ключа и строки: RET23 )

Мой вопрос, как мне найти идентификатор ключа, соответствующий, конечно, строке Exercise.

В массиве я могу просто сравнить его с помощью containsObject.

Я хочу сделать то же самое и получить соответствующую строку. Я хочу сделать это, например, (просто чтобы люди поняли идею) </p> <p><strong>ThisDictionary containsObject LookForObject</strong> </p> <p>

И когда я нахожу ключ ID = OIK74, я бы хотел провести тестирование строки с ним. Я выполнил этот поиск с помощью xmlparsing, но мне было интересно, что должен быть более быстрый способ получить идентификатор и соответствующую строку.

Ответы [ 2 ]

1 голос
/ 21 июля 2009

Вы можете найти значение ключа в словаре, используя objectForKey:. Например:

NSString* exercise = [dictionary objectForKey:@"OIK74"];

См. Ссылка на класс NSDictionary для получения дополнительной информации.

0 голосов
/ 27 июня 2010

Я думаю, что ОП хочет пройти "тестирование", выполнив поиск "OIK74".

Первое, что я хотел бы предложить, это сделать ключ OIK74, а затем извлечь значение строки тривиально. Если у каждой из ваших строк есть один и тот же ключ Exercise, это кажется излишним, когда кажется, что ID на самом деле является идентификатором, который должен быть уникальным и достаточно хорошо служить в качестве ключа.

Если вы настроены на это расположение данных (которое я скажу еще раз, я думаю, что следует вернуться к нему, если это возможно), тогда вы смотрите на что-то отличное от простого бурения по траектории. Вы ищете значение одноуровневого узла в словаре для вашей конкретной строки. NSXMLDocument может сделать это довольно легко с запросами xpath, я полагаю. Концептуальный барьер здесь заключается в том, что NSDictionary отражает структуру списков, но NSDictionary на самом деле не является XML. У вас нет тегов и значений. У вас есть ключи и ценности. В XML / plist-представлении NSDictionary тегами являются <key> и <value>, а ваши ключи и значения NSDictionary являются значениями в этих тегах.

Я не уверен на 100%, какова внутренняя структура данных, которые вы наметили, но похоже, что у вас есть что-то вроде

root = (
    item1 = { 
        Exercise = "testing",
        ID = "OIK74"
    }
    item2 = {
        Exercise = "testing3",
        ID = "424RE"
    }
    item3 = {
        Exercise = "testing5",
        ID = "RET23"
    }
)

в текстовом формате. Это правильно? Если так, то я бы предложил полностью перестроить это в гораздо более простую структуру:

{
    "OIK74" = "testing",
    "424RE" = "testing3",
    "RET23" = "testing5"
}

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

{
    "OIK74" = { 
        "Exercise" = "testing",
        "OtherDataPoint" = "othervalue"
    },
    "424RE" = { 
        "Exercise" = "testing3",
        "OtherDataPoint" = "othervalue3"
    },
    "RET23" = { 
        "Exercise" = "testing5",
        "OtherDataPoint" = "othervalue5"
    }
}

Так как вы упомянули, что значение OIK74, которое вы ищете, является ключевым, этот подход имеет гораздо больше смысла, IMHO С этой новой структурой данных вы получите значение «testing» с [dictionary valueForKey:@"OIK74"]; или [dictionary valueForKeyPath:@"OIK74.Exercise"]; соответственно. Надеюсь, это поможет.

...