Вложенный словарь — нацеливание на отдельные ключи

#objective-c #nsarray #nsdictionary

#objective-c #nsarray #nsdictionary

Вопрос:

Я ценю, что здесь много вопросов такого типа, но я не смог найти приемлемый ответ.

Проще говоря, мне нужно получить массив цен на все товары в выбранной категории.

Вот мой список:

 <key>Product Category</key>
    <dict>
        <key>Product 1</key>
        <dict>
            <key>Image</key>
            <string></string>
            <key>Large Image</key>
            <string></string>
            <key>Detail</key>
            <string></string>
            <key>Price</key>
            <integer>100</integer>
        </dict>
        <key>Product 2</key>
        <dict>
            <key>Image</key>
            <string></string>
            <key>Large Image</key>
            <string></string>
            <key>Detail</key>
            <string></string>
            <key>Price</key>
            <integer>200</integer>
        </dict>
    </dict>
  

Я понятия не имею, как настроить таргетинг глубоко внутри такой иерархии. Вот моя попытка на данный момент:

 NSString *detailPListPath = [[NSBundle mainBundle] pathForResource:@"detail" ofType:@"plist"];
NSDictionary *detailDictionary = [NSDictionary dictionaryWithContentsOfFile:detailPListPath];
currentDetail = [[NSMutableArray alloc] init];

for (id object in [detailDictionary objectForKey:indication]) {
    [currentDetail addObject:object];
}
  

Но тогда currentDetail просто показывает продукт 1, продукт 2 и т.д.

Спасибо за любую помощь, которую вы можете предложить!

Ответ №1:

currentDetail просто показывает продукт 1, продукт 2 и т.д.

Поскольку быстрое перечисление a NSDictionary повторяется по ключам, вы добавляете ключи в массив. Следовательно, ваш вывод показывает продукт 1, продукт 2 и т.д.

Мне нужно получить массив цен на все товары в выбранной категории.

Вам необходимо использовать эти ключи (продукт 1, продукт 2 и т.д.) Для извлечения связанного словаря продуктов, А затем получить значение, связанное с ключом цены:

 NSDictionary *detailDict = [NSDictionary dictionaryWithContentsOfFile:[[NSBundle mainBundle] pathForResource:@"detail" ofType:@"plist"]];
NSDictionary *categoryDict = [detailDict objectForKey:@"Product Category"];
NSMutableArray *pricesArray = [NSMutableArray arrayWithCapacity:[categoryDict count]];
for (NSString *key in categoryDict) {
    [pricesArray addObject:[[categoryDict objectForKey:key] objectForKey:@"Price"]];
}
  

Имейте в виду, что результирующие данные pricesArray расположены без определенного порядка.

Комментарии:

1. Вы не просто показали мне решение, вы многому научили меня о том, как получить доступ к глубоким словарям. Твое здоровье, приятель, твоя палочка-выручалочка!