Удалить все значения (строки), соответствующие поисковому запросу, из массивов, расположенных в словаре? - PullRequest
0 голосов
/ 08 августа 2011

В настоящее время я программирую приложение с tableView, аналогичное тому, которое есть в приложении iPhone Contacts.

Все работает (разделы, панель справа, показывающая заголовки, ячейки настроены...), рядом с панелью поиска.Я знаю, как это сделать (поиск), если данные tableView загружаются из массива, но моя ситуация заключается в том, что он загружается из массивов, расположенных в NSDictionary.

Диктовка выглядит как

Key = "A" >> Value = "array = apple, animal, alphabet, abc ..."
Key = "B" >> Value = "array = bat, ball, banana ..."

Как удалить все строки (из всех массивов словаря), соответствующие поисковому запросу?

Заранее большое спасибо:)

Ответы [ 3 ]

2 голосов
/ 08 августа 2011

Ну, вы можете сделать это так

NSMutableDictionary *newItems = [NSMutableDictionary dictionary];
for (NSString *key in oldItems) {
    NSMutableArray *newArray = [NSMutableArray array];
    for (NSString *item in [oldItems objectForKey:key]) {
        if ([item rangeOfString:searchTerm].location != NSNotFound) {
            [newArray addObject:item];
        }
    }
    if ([newArray count]) {
        [newItems setObject:newArray forKey:key];
    }
}
[oldItems release];
oldItems = [newItems retain];

Я не знаю, является ли это лучшим способом сделать это, или даже если это достаточно быстро, но дайте мне знать, если это работает для вас.

1 голос
/ 09 августа 2011

Из ваших комментариев я понимаю, что вы хотите отфильтровать содержимое таблицы на основе того, что пользователь вводит в текстовое поле. Для этого вам не нужно изменять свой словарь при каждом изменении символа. UISearchDisplayController предназначен именно для этого сценария. Посмотрите на ссылку для деталей: http://developer.apple.com/library/ios/#documentation/UIKit/Reference/UISearchDisplayController_Class/Reference/Reference.html.

НТН,

Акшай

1 голос
/ 08 августа 2011

Хотите обновить существующий словарь новым массивом, исключающим эту строку?

NSMutableDictionary* excludedDictionary = [NSMutableDictionary dictionaryWithDictionary:existingDictionary];

for(id key in [existingDictionary allKeys])
{
   NSArray* existingArray = [existingDictionary objectForKey:key];
   NSPredicate* predicate = [NSPredicate predicateWithFormat:@"self != %@", excludedString];
   NSArray* excludedArray = [existingArray filteredArrayUsingPredicate:predicate];
   [excludedDictionary setObject:excludedArray forKey:key];
}
existingDictionary = [NSDictionary dictionaryWithDictionary:excludedDictionary];

Это заменит существующий словарь на тот, в котором нет строки ...

...