Xem xét NSArray sau:NSPredicate 'OR' lọc dựa trên một NSArray các phím
NSArray *dataSet = [[NSArray alloc] initWithObjects:
[NSDictionary dictionaryWithObjectsAndKeys:@"abc", @"key1", @"def", @"key2", @"hij", @"key3", nil],
[NSDictionary dictionaryWithObjectsAndKeys:@"klm", @"key1", @"nop", @"key2", nil],
[NSDictionary dictionaryWithObjectsAndKeys:@"qrs", @"key2", @"tuv", @"key4", nil],
[NSDictionary dictionaryWithObjectsAndKeys:@"wxy", @"key3", nil],
nil];
Tôi có thể lọc mảng này để tìm đối tượng từ điển có chứa các chínhkey1
// Filter our dataSet to only contain dictionary objects with a key of 'key1'
NSString *key = @"key1";
NSPredicate *key1Predicate = [NSPredicate predicateWithFormat:@"%@ IN [email protected]", key];
NSArray *filteretSet1 = [dataSet filteredArrayUsingPredicate:key1Predicate];
NSLog(@"filteretSet1: %@",filteretSet1);
Trả lại một cách thích hợp:
filteretSet1: (
{
key1 = abc;
key2 = def;
key3 = hij;
},
{
key1 = klm;
key2 = nop;
}
)
Bây giờ, tôi muốn lọc bộ dữ liệu cho các đối tượng từ điển có chứa ANY của các khóa trong NSArray.
Ví dụ, bằng cách sử dụng mảng: NSArray *keySet = [NSArray arrayWithObjects:@"key1", @"key3", nil];
Tôi muốn tạo ra một vị trả về và mảng của bất kỳ đối tượng từ điển có chứa một trong hai 'key1' hoặc 'key3' (nghĩa là trong ví dụ này tất cả các đối tượng từ điển sẽ. được trả về ngoại trừ đối tượng thứ ba - vì nó không chứa 'key1' hoặc 'key3').
Bất kỳ ý tưởng nào về cách tôi sẽ đạt được điều này? Tôi có phải sử dụng một vị từ ghép không?
* bất kỳ * là những gì tôi đã mất tích. Tôi không biết tại sao tôi thấy NSPredicate rất khó khăn để có được đầu của tôi xung quanh. Cảm ơn câu trả lời của bạn. Monolo +1 :) –
trường hợp này có nhạy cảm không? Tôi sẽ tìm ra cuối cùng, nhưng tôi hy vọng nó đã được. Ill bình luận lại sau. – coolcool1994
@ coolcool1994 BẤT K and và IN (và SELF) trong biến vị ngữ trên không phân biệt chữ hoa chữ thường (trên thực tế, tôi thường viết chúng trong tất cả các chữ cái để làm nổi bật), tên khóa/phương thức, vì vậy '@ allKeys' _is_ case sensitive . – Monolo