ios - проверка значений в массиве словарей - PullRequest
2 голосов
/ 08 марта 2012

У меня есть 2 массива.Первый - это массив словарей из фида JSON.Второй - это просто массив значений, которые я использую для заполнения UITableView.

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

Надеюсь, что это имеет смысл, я не вижу другого способа объяснить это;-)

Ответы [ 2 ]

2 голосов
/ 08 марта 2012

Вы можете использовать indexesOfObjectsPassingTest: с блоком, который ищет внутри словаря, но он неоптимален: вы будете снова и снова повторять один и тот же поиск для каждой ячейки, что может замедлить работу вашего приложения, особенно когда пользовательпрокручивает ваш стол быстро.Вам было бы гораздо лучше создать NSSet с элементами, как только вы получите фид, и использовать его повторно при отображении ячеек таблицы.

Пример:

Создайте NSSet *allIds при получении канала JSON, например:

allIds = [[NSMutableSet alloc] init]; // NSSet *allIds is declared
         // in the same class as the array from which you get your table cells
[responseArray enumerateObjectsUsingBlock:^(id obj, NSUInteger idx, BOOL *stop) {
    [allIds addObjectsFromArray:[arrayOfDictsFromJsonFeed allKeys]];
}];

Когда вам нужно решить, показывать ли ваш вспомогательный вид или нет, сделайте это:

if ([allIds containsObject:currentId]) {
    // Add accessory view
}
0 голосов
/ 08 марта 2012

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

...