iPhone - перебор массива словарей и получение объекта - PullRequest
1 голос
/ 09 февраля 2011

В моем приложении у меня есть NSArray, который содержит объекты NSDictionary. В каждом словаре есть один «Primary», который содержит значение типа NSNumber, в котором хранится «YES» или «NO» (логическое значение). И только объект словаря в массиве может иметь значение «ДА». Без использования циклов, как я могу получить объект словаря, где «Первичный» ключ - ДА?

Ответы [ 2 ]

1 голос
/ 09 февраля 2011

Вы можете вызвать вспомогательный метод на NSArray, чтобы найти объект, но имейте в виду, что такой метод все еще использует цикл для поиска объекта.

NSUInteger indexOfPrimary = [array indexOfObjectPassingTest:^(id obj, NSUInteger idx, BOOL *stop) {
    return [[obj objectForKey:@"Primary"] boolValue];
}];
NSDictionary *primary = nil;
if (indexOfPrimary != NSNotFound) {
    primary = [array objectAtIndex:indexOfPrimary];
}

Другой вариант будет -[NSArray filteredArrayUsingPredicate:].

0 голосов
/ 09 февраля 2011

Что вы подразумеваете под "без использования петель"?Значение вы не пишите цикл for, или вы имеете в виду, что любая используемая вами процедура не будет использовать цикл?Если вы хотите получить ответ в «постоянном времени», а не «линейном времени», вам просто нужно сохранить указатель на запись.Если вы не владеете вставкой / удалением элементов в массиве, то нет, нет другого способа, кроме линейного поиска по времени, либо выполнения цикла самостоятельно, либо использования NSArray

- (NSIndexSet *)indexesOfObjectsPassingTest:(BOOL (^)(id obj, NSUInteger idx, BOOL *stop))predicate
...