今天在写程序的时候需要对NSMutableArray中的复杂对象排序,一时不知如何下手,在百度上谷歌后得到以下解决方案:
说明:以下程序中NSMutableArray数组中包含的对象是NSDictionary,而下面要实现的排序就是根据NSDictionary中的key代表的value进行比较而排序,如下:
//1.对字段的封装
- (NSDictionary *)formateDicWithName:(NSString *)name
value:(NSNumber *)value
color:(UIColor *)color
{
return [NSDictionary dictionaryWithObjectsAndKeys:
name,@"name",
value,@"value",
color,@"color",nil];
}
//2.准备数据
NSMutableArray *result = [NSMutableArray arrayWithCapacity:0];
NSDictionary *deptBal =
[self formateDicWithName:@"储蓄余额"
value: [NSNumber numberWithFloat:30]
color:[UIColor redColor]];
[result addObject:deptBal];
NSDictionary *finBal =
[self formateDicWithName:@"理财产品余额"
value: [NSNumber numberWithFloat:20]
color: [UIColor yellowColor]];
[result addObject:finBal];
NSDictionary *debtBal =
[self formateDicWithName:@"国债余额"
value: [NSNumber numberWithFloat:40]
color: [UIColor blueColor]];
[result addObject:debtBal];
NSDictionary *fundBal =
[self formateDicWithName:@"基金市值"
value: [NSNumber numberWithFloat:10]
color: [UIColor blackColor]];
[result addObject:fundBal];
//3.实现排序
NSArray *newResult =
[result sortedArrayUsingComparator:^(id obj1,id obj2)
{
NSDictionary *dic1 = (NSDictionary *)obj1;
NSDictionary *dic2 = (NSDictionary *)obj2;
NSNumber *num1 = (NSNumber *)[dic1 objectForKey:@"value"];
NSNumber *num2 = (NSNumber *)[dic2 objectForKey:@"value"];
if ([num1 floatValue] > [num2 floatValue])
{
return (NSComparisonResult)NSOrderedAscending;
}
else
{
return (NSComparisonResult)NSOrderedDescending;
}
return (NSComparisonResult)NSOrderedSame;
}];
经过1、2、3三个操作得到的数组newResult,就是根字典NSDictionary中的value所代表的值进行由大到小排序的数组。