2015-03-11 4 views
-1

В моей Tableview У меня есть массив с категориями и в каждой категории есть несколько продуктов (Все эти продукты являются NSObjects):поиск NSObject в многомерном массиве

category-1: 
    - product-1 
    - product-3 
category-2: 
    - product-2 
    - ... 

При нажатии кнопки случайный продукт выбран , Мне нужно найти соответствующий продукт в массиве с категориями и продуктами. Любые советы делают это без большого цикла?

Это как структура данных сборка:

for(Category *category in self.categories){ 
    NSMutableArray *categorydata = [[NSMutableArray alloc] init]; 
    for(Product *product in self.products){ 
     if(category.catid == product.catid) [categorydata addObject:product]; 
    } 
    [[AppModel sharedInstance].serverDocuments addObject:categorydata]; 
} 

Категория и Продукт пользовательское NSObjects с CatID и именем.

+0

Нужна дополнительная информация, чтобы помочь. Можете ли вы предоставить дополнительную информацию о своей структуре данных? Является ли категория классом или просто способом организации продуктов в отдельных массивах? Если класс имеет свойство 'products', то это' NSArray' продуктов? Как выбирается «случайный» продукт? Можете ли вы настроить слабую круговую ссылку из продукта обратно в свою категорию? Вы даже хотите это сделать? – mbm29414

ответ

0

Прежде всего, этот код глупо:

for(Category *category in self.categories){ 
    NSMutableArray *categorydata = [[NSMutableArray alloc] init]; 
    for(Product *product in self.products){ 
     if(category.catid == product.catid) [categorydata addObject:product]; 
    } 
    [[AppModel sharedInstance].serverDocuments addObject:categorydata]; 
} 

Если есть только один продукт, где category.catid == product.catid, то в вашей статье if вы должны break после его найти: нет никакого смысла продолжать цикл, потому что поиск эффективно завершен.

Во-вторых, конечно, вы можете выразить это более компактно с помощью таких методов, как использование кодирования NSPredicate и/или ключевого значения. Но под капотом цикл все равно будет происходить, поэтому на самом деле ничего не получается. Проблема в том, что вы не структурировали это как словарь, где есть ключ, который принимает вас напрямую в правильную запись. Если вам нужен такой прямой доступ, вам придется реструктурировать модель.

0

В настоящее время ваш код будет проходить через КАЖДЫЙ продукт в категории КАЖДЫЙ. Вы должны начать с использования break после того, как найдете продукт, который ищете. Это «сломается» из цикла продукта.

Вы также должны указать break вне категории loop (см. https://stackoverflow.com/a/9419013/4633161) или - если вам нужно пройти через последующие категории, вы могли бы continue.

Смежные вопросы