Фильтрация всего NSDictionaries из NSArray на основе нескольких ключей - PullRequest
2 голосов
/ 16 марта 2010

У меня есть NSArray объектов NSDictionary, из которого я хотел бы иметь возможность возвращать новый массив NSDictionaries, где каждый NSDictionary имеет «Площадь == Север» (например).

Ближайший пример, который я нашел до сих пор, это Использование NSPredicate для фильтрации NSArray на основе ключей NSDictionary , но это просто возвращает уникальные значения для данного ключа, а не словарь с таким ключом. Есть ли способ выполнить подобную операцию и вернуть весь словарь?

Ответы [ 2 ]

9 голосов
/ 17 марта 2010

NSPredicate должен работать нормально, я пробовал это:

NSMutableArray *a = [NSMutableArray array];
[a addObject:[NSDictionary dictionaryWithObjectsAndKeys:@"North", @"Area", @"North", @"Test", nil]];
[a addObject:[NSDictionary dictionaryWithObjectsAndKeys:@"South", @"Area", @"North", @"Test", nil]];
[a addObject:[NSDictionary dictionaryWithObjectsAndKeys:@"East", @"Area", @"North", @"Test", nil]];
NSPredicate *p = [NSPredicate predicateWithFormat:@"%K matches %@", @"Area", @"North"];
NSArray *newArray = [a filteredArrayUsingPredicate:p];
NSLog(@"newArray:%@", [newArray description]);

Работает.

2 голосов
/ 17 марта 2010

Звучит достаточно просто:

NSArray *unfilteredDictionaries;  // however you get this...
NSMutableArray *filteredDictionaries = 
  [NSMutableArray arrayWithCapacity:[unfilteredDictionaries count]];
NSDictionary *dict;
for (dict in unfilteredDictionaries)
   if ([[dict valueForKey:@"Area"] isEqualToString:@"North"])
     [filteredDictionaries addObject:dict];

return filteredDictionaries;
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...