2015-11-22 2 views
0

Можно ли использовать nspredicate для сравнения того, является ли один NSArray в точности равным другому NSArray строк? Мне нужен этот купол через предикаты из-за его возможного, я добавлю этот предикат к составному предикату.NSPredicate для сравнения идентичных строковых массивов?

Array Я сравниваю это свойство NSDictionary.

Таким образом, ответ был смесью обоих, я действительно использовал predicatewithformat но получил творческий в строке внутри, вдохновленный @akashivskyy и @avi

[predicatesArray addObject:[NSPredicate predicateWithFormat:@"ANY dynamic.values == %@", arr]]; 
+0

Почему вы используете предикат, чтобы увидеть, совпадают ли два массива? – rmaddy

+0

У меня есть ряд фильтрующих операций, для которых я использую составной nspredicate. – Huang

+0

FYI, я отредактировал ответ, чтобы использовать предикат строки формата. – akashivskyy

ответ

1

Edit: В (частично), предложенные Avi, вы можете использовать предикат равенства:

NSArray *otherArray = @[ @"foo", @"bar" ]; 

NSPredicate *predicate = [NSPredicate predicateWithFormat:@"self == %@", otherArray]; 

[predicate evaluateWithObject:@[ @"foo", @"bar" ]]; // YES 
[predicate evaluateWithObject:@[ @"baz", @"qux" ]]; // NO 

в качестве альтернативы, и если у вас есть какие-либо проблемы с форматом строкой в ​​будущем, вы можете всегда использовать блочный предикат для выполнения собственной логики:

NSArray *otherArray = @[ @"foo", @"bar" ]; 

NSPredicate *predicate = [NSPredicate predicateWithBlock:^(NSArray *evaluatedArray, NSDictionary<NSString *, id> *bindings) { 
    return [evaluatedArray isEqualToArray:otherArray]; 
}]; 

// use the predicate 
+0

, что kinda выполнил эту работу, я должен был уточнить больше, NSArray, с которым я сравниваю, является свойством другого NSDictionary, как я могу подать в суд на ваш ответ, чтобы получить доступ к этому? – Huang

+0

Вы также можете сделать [[NSPredicate predicateWithFormat: @ "% @ ==% @", array1, array2] '. – Avi

+0

@Avi: Ваша версия требует, чтобы как 'array1', так и' array2' были объявлены снаружи. Но использование 'self' сделает трюк, спасибо за предложение! – akashivskyy

Смежные вопросы