如何使用两个键值对 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];
我的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];