按顺序排序预定义的字符串数组

时间:2017-07-10 04:35:01

标签: ios objective-c nspredicate

在以下reversedArray中有三个更多字符串,例如SaladsMeats Appetizer

但是,我希望Meats始终是数组中的第一个字符串。

NSPredicate *predicateMain = [NSPredicate predicateWithFormat:
                              @"(%K == %@)", @"categoryType", @"main"];

NSPredicate *predicateSide = [NSPredicate predicateWithFormat:
                              @"(%K == %@)", @"categoryType", @"side"];

NSPredicate *orPredicate = [NSCompoundPredicate orPredicateWithSubpredicates:
                            [NSArray arrayWithObjects:predicateMain, predicateSide,nil]];

NSArray *filteredArray = [foods filteredArrayUsingPredicate:orPredicate];

NSArray *reversedArray = [[[filteredArray valueForKeyPath:
                         @"@distinctUnionOfObjects.categoryName"] 
                         reverseObjectEnumerator] allObjects];

我可以通过硬编码来完成,但我想知道正确的处理方式。

1 个答案:

答案 0 :(得分:0)

为了避免硬编码,您可以编写一个函数来重新排序数组,并将任何给定的字符串作为第一个字符串,并使用它。

例如:

void yourFunctionName(string firstString, NSArray &array){
     //Iterate through array
     //Check if you've found a string matching firstString
     //Put it at the front by moving everything else down one
     //Continue to iterate until you've reached the end of the array
}

这里最好通过引用传递数组(使用&),以便修改数组本身,而不仅仅是数组值的副本(当您不通过引用传递时获得的数据)。