Я следующую структуру:Сравнивая массив с другой, используя NSPredicate
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 функциональность для достижения этой цели или следует использовать какой-либо другой метод фильтрации?
Цените свою помощь.
Спасибо, Kumar
Отлично. Спасибо за ваш вклад. – KumarM