У меня следующая структура:
TxnSummary * t1 = [[TxnSummary alloc] init];
t1.txnId = @"1";
t1.shortDesc = @"First one";
t1.filters = [[NSArray alloc] initWithObjects:@"F1", @"F2", nil];
TxnSummary * t2 = [[TxnSummary alloc] init];
t2.txnId = @"2";
t2.shortDesc = @"Second one";
t2.filters = [[NSArray alloc] initWithObjects:@"F1",@"F2", @"F3", nil];
TxnSummary * t3 = [[TxnSummary alloc] init];
t3.txnId = @"3";
t3.shortDesc = @"Third one";
t3.filters = [[NSArray alloc] initWithObjects:@"F1", @"F3", nil];
TxnSummary * t4 = [[TxnSummary alloc] init];
t4.txnId = @"4";
t4.shortDesc = @"Fourth one";
t4.filters = [[NSArray alloc] initWithObjects:@"F4", nil];
NSArray * xnArray = [[NSArray alloc] initWithObjects:t1,t2,t3,t4, nil];
Теперь, если я хочу выяснить, какие из сводок txn имеют фильтры F1, я мог бы сделать это:
NSPredicate * predicate = [NSPredicate predicateWithFormat:@"filters CONTAINS[cd] %@", @"F1"];
NSArray * filteredArray = [xnArray filteredArrayUsingPredicate:predicate];
Это хорошо работает, если я сравниваю только одну строку, но если я хочу выяснить, какие из всех сводок txn имеют фильтры "F1" или "F2", тогда, если мне придется следовать вышеуказанному механизму, у меня создать два предиката - каждый для F1 и F2, а затем запустить его для xnArray (который кажется неэффективным). Я хочу иметь возможность создать список строк фильтров и использовать его для получения соответствующих txs из массива xn.
NSArray * filterStrings = [[NSArray alloc] initWithObjects:@"F1",@"F2", nil];
Имеет ли NSPredicate функциональность для достижения этой цели или мне следует прибегнуть к какому-либо другому методу фильтрации?
Ценю вашу помощь.
Спасибо, Кумар