На самом деле вы можете довольно хорошо выполнять такую фильтрацию, используя NSPredicate
:
NSDictionary *testA = [NSDictionary dictionaryWithObjectsAndKeys:@"valA", @"key1", @"1", @"key2", nil];
NSDictionary *testB = [NSDictionary dictionaryWithObjectsAndKeys:@"valB", @"key1", @"2", @"key2", nil];
NSDictionary *testC = [NSDictionary dictionaryWithObjectsAndKeys:@"valC", @"key1", @"1", @"key2", nil];
NSDictionary *testD = [NSDictionary dictionaryWithObjectsAndKeys:@"valD", @"key1", @"3", @"key2", nil];
NSArray *testArr = [NSArray arrayWithObjects:testA, testB, testC, testD, nil];
NSPredicate *pred = [NSPredicate predicateWithFormat:@"key2 == %@", @"1"];
NSArray *testFilter = [testArr filteredArrayUsingPredicate:pred];
NSLog(@"%@", testFilter);
Эта установка создает 4 словаря и их массив. Выражение фильтра теперь ищет все содержащиеся объекты, где key2
равно 1
, что должно быть testA
и testC
. И вуаля есть выход:
2011-11-24 18:57:07.822 testapp[9977:f803] (
{
key1 = valA;
key2 = 1;
},
{
key1 = valC;
key2 = 1;
}
)
Таким образом, вы можете создать предикат для фильтрации по имени вашей команды и создать отфильтрованную версию вашего массива. Как правило, это работает для всех типов объектов, которые поддерживают кодирование значения ключа (что делает NSDictionary
, дополнительная информация по этому вопросу: http://developer.apple.com/library/ios/#documentation/Cocoa/Conceptual/KeyValueCoding/Articles/BasicPrinciples.html#//apple_ref/doc/uid/20002170)