如何使用两个键值对 nsmutablearray 进行排序

How to sort nsmutablearray with two key values

我的NSMutableArray值如下

我想使用“category_name”和 total_assets > 0.00

按字母顺序对数组进行排序

给我一些排序代码

{
    CID = 1;
    "category_name" = Art;
    "rbg_color" = "1,187,212";
    "total_assets" = "12500.00";
},
{
    CID = 2;
    "category_name" = Automobile;
    "rbg_color" = "244,66,54";
    "total_assets" = "102600.00";
},
{
    CID = 3;
    "category_name" = Banks;
    "rbg_color" = "1,149,135";
    "total_assets" = "0.00";
},
{
    CID = 4;
    "category_name" = Cash;
    "rbg_color" = "75,175,79";
    "total_assets" = "25000.00";
},
{
    CID = 5;
    "category_name" = Clothing;
    "rbg_color" = "103,57,182";
    "total_assets" = "0.00";
},
{
    CID = 7;
    "category_name" = Electronics;
    "rbg_color" = "32,149,242";
    "total_assets" = "0.00";
},

{
    CID = 10;
    "category_name" = Watches;
    "rbg_color" = "139,194,74";
    "total_assets" = "0.00";
},
{
    CID = 11;
    "category_name" = Wine;
    "rbg_color" = "62,80,180";
    "total_assets" = "30500.00";
}

使用这个,

NSSortDescriptor *sort = [NSSortDescriptor sortDescriptorWithKey:@"category_name" ascending:YES];
tempArray=[yourArray sortedArrayUsingDescriptors:@[sort]];

NSSortDescriptor *sort1 = [NSSortDescriptor sortDescriptorWithKey:@"total_assets" ascending:YES];
sortedArray=[tempArray sortedArrayUsingDescriptors:@[sort1]];

你的朋友 NSPredicat and NSSortDescriptor 你可以在提供的链接中找到两者的 Apple 文档,一个简单的方法如下:

-(void)sortMeyhod
{
    NSSortDescriptor *sortDescriptor;
   //here you initialize the descriptor with key category_name , and it is case insensitive i.e capital or small
   sortDescriptor=[[NSSortDescriptor alloc] initWithKey:@"category_name"
                                           ascending:YES
                                           selector:@selector(caseInsensitiveCompare:)];
   //create your descriptors array .
   sortDescriptors = [NSArray arrayWithObject:sortDescriptor];
   //sort your array . 
   yourArray  = [yourArray sortedArrayUsingDescriptors:sortDescriptors];
    //filter your array with a predicate . 
   NSPredicate * predicate = [NSPredicate predicateWithFormat:@"%K > 0.00" , @"total_assets"] ;
   yourArray =[yourArray filteredArrayUsingPredicate:predicate] ; 
}

我没有完全测试代码,但理论上它应该可以工作,另请参阅文档。

NSSortDescriptor *sortDescriptor  = [[NSSortDescriptor alloc] initWithKey:@"category_name" ascending:YES];
NSArray *sortedArray = [myArray sortedArrayUsingDescriptors:@[sortDescriptor]];

NSPredicate *predicate = [NSPredicate predicateWithFormat:@"%K > 0.00" , @"total_assets"] ;
sortedArray = [sortedArray filteredArrayUsingPredicate:predicate];

NSLog(@"%@",sortedArray);

终于解决了:

NSSortDescriptor *sortDescriptor  = [[NSSortDescriptor alloc] initWithKey:@"category_name" ascending:YES];
NSArray *sortedCatg = [myArray sortedArrayUsingDescriptors:@[sortDescriptor]];

NSPredicate *predicate = [NSPredicate predicateWithFormat:@"%K > %@" , @"total_assets",@"0.00"] ;
sortedCatg = [sortedCatg filteredArrayUsingPredicate:predicate];

NSPredicate *predicate1 = [NSPredicate predicateWithFormat:@"%K = %@" , @"total_assets",@"0.00"] ;
NSArray *sortedAssets = [myArray filteredArrayUsingPredicate:predicate1];

myArray = [[NSMutableArray alloc]init];
[myArray addObjectsFromArray:sortedCatg];
[myArray addObjectsFromArray:sortedAssets];