2014-02-18 65 views
0

我有多个类别列表(约45)。我想展示一些类似的东西(直升机,怪物湖,恐龙攻击),在这个重新开始之后会出现的其他类别将会出现。我已经使用了下面的代码。NSPredicate安排NSMutableArray对象?

这工作正常。但它很漫长。所以我想过滤这些代码。

NSPredicate *predicate = [NSPredicate predicateWithFormat:@"SELF IN %@", @[@"Helicopter", @"Lake Monster",@"Dinosaur Attack"]]; 
NSPredicate *predicate1 = [NSPredicate predicateWithFormat:@"packageName CONTAINS[cd] %@", @"Helicopter"]; 
NSPredicate *predicate2 = [NSPredicate predicateWithFormat:@"packageName CONTAINS[cd] %@", @"Lake Monster"]; 
NSPredicate *predicate3 = [NSPredicate predicateWithFormat:@"packageName CONTAINS[cd] %@", @"Dinosaur Attack"]; 

NSMutableArray *filteredArray = [[NSMutableArray alloc]init]; 
NSArray *arr1=[packages filteredArrayUsingPredicate:predicate1]; 
NSArray *arr2=[packages filteredArrayUsingPredicate:predicate2]; 
NSArray *arr3=[packages filteredArrayUsingPredicate:predicate3]; 

[filteredArray insertObject:[arr1 objectAtIndex:0] atIndex:0]; 
[filteredArray insertObject:[arr2 objectAtIndex:0] atIndex:1]; 
[filteredArray insertObject:[arr3 objectAtIndex:0] atIndex:2]; 
[packages removeObject:[arr1 objectAtIndex:0]]; 
[packages removeObject:[arr2 objectAtIndex:0]]; 
[packages removeObject:[arr3 objectAtIndex:0]]; 

那么有什么办法用最短的方法来实现这个结果?

回答

1

只是清理自己的代码,你可以做到以下几点:

NSPredicate *predicate1 = [NSPredicate predicateWithFormat:@"packageName CONTAINS[cd] %@", @"Helicopter"]; 
NSPredicate *predicate2 = [NSPredicate predicateWithFormat:@"packageName CONTAINS[cd] %@", @"Lake Monster"]; 
NSPredicate *predicate3 = [NSPredicate predicateWithFormat:@"packageName CONTAINS[cd] %@", @"Dinosaur Attack"]; 

NSMutableArray *filteredArray = [[NSMutableArray alloc]init]; 
for (NSPredicate *predicate in @[predicate1, predicate2, predicate3]) { 
    NSArray *arr=[packages filteredArrayUsingPredicate:predicate]; 
    [filteredArray addObject:arr[0]]; 
    [packages removeObject:arr[0]]; 
} 
+0

其漂亮GUD。但它可能只有一个NSPredicate可以实现这一点 –

0

您应该创建一个具有两个属性(NSString *)文本和(NSNumber *)顺序的类(让它称为STOElement)。为每个元素'Helicopter'等创建该类的实例,将其设置为文本,然后按照顺序(1,2,3等)设置您希望该元素出现的顺序。

然后使用sortedArrayUsingComparator:获得与秩序的数组你想

NSArray* sortedArray = [arrayOfElements sortedArrayUsingComparator:^NSComparisonResult(STOElement* element1, STOElement* element2) { 
    return [element1.order compare:element2.order]; 
}];