Ios 使用NSPredicate比较两个阵列

Ios 使用NSPredicate比较两个阵列,ios,image,cocoa,nspredicate,Ios,Image,Cocoa,Nspredicate,我有两个数组,一个表示全尺寸图像的列表,另一个表示图像的缩略图。有一种方法可以使用NSPredicate检查全尺寸图像是否有缩略图 拇指称为img{number}\u thumb.jpg,全尺寸图像称为img{number}.jpg。使用数组、字符串和循环: NSArray *thumbs=@[@"img1_thumb.jpg",@"img2_thumb.jpg",@"img3_thumb.jpg",@"img4_thumb.jpg",@"img5_thumb.jpg",]; NSArray *

我有两个数组,一个表示全尺寸图像的列表,另一个表示图像的缩略图。有一种方法可以使用NSPredicate检查全尺寸图像是否有缩略图


拇指称为img{number}\u thumb.jpg,全尺寸图像称为img{number}.jpg。

使用数组、字符串和循环

NSArray *thumbs=@[@"img1_thumb.jpg",@"img2_thumb.jpg",@"img3_thumb.jpg",@"img4_thumb.jpg",@"img5_thumb.jpg",];
NSArray *images=@[@"img1",@"img2",@"img3",@"img41",@"img5"];

BOOL isSame=YES;
for (NSString *name in images) {
    if (![thumbs containsObject:[NSString stringWithFormat:@"%@_thumb.jpg",name]]) {
        isSame=NO;
        NSLog(@"%@ doesn't has thumb image",name);
        break; //if first not found is not good enough remove this break
    }
}
NSLog(@"%@",isSame?@"All thumb has image":@"All thumb does not have image");

使用NSPredicate:

for (NSString *image in images) {
    NSPredicate *predicate=[NSPredicate predicateWithFormat:@"SELF like [c]%@",[NSString stringWithFormat:@"%@_thumb.jpg",image]];
    NSArray *filtered=[thumbs filteredArrayUsingPredicate:predicate];
    if (filtered.count==0) {
        NSLog(@"%@ not found",image);
    }
}
你可以用


如果可以安排两个数组具有相同的值(即img1.jpg和img1_thumb.jpg都用“1”表示,但在不同的数组中),则不带缩略图的图像集为:

[[NSMutableSet setWithArray:images] minusSet:[NSSet setWithArray:thumbnails]]

使用数组和字符串对你有用吗?我应该怎么做?这是一个问题,我宁愿使用not循环,但我认为这是唯一的方法。谢谢:)我想您可以使用
EnumerateObjectsSusingBlock:
同时检查数组以进一步加快速度?
[[NSMutableSet setWithArray:images] minusSet:[NSSet setWithArray:thumbnails]]