iOS高级程序师技术群:622177838,期待你的加入
由于float类型排序,会因为整数部分位数不同的原因,造成排序问题,比如:
NSArray * arr = @[@[@"startAmout":@"10.00"],@[@"startAmout":@"11.53"],@[@"startAmout":@"15.37"],@[@"startAmout":@"15.37"],@[@"startAmout":@"5.56"],@[@"startAmout":@"17.30"]];
NSSortDescriptor *descriptor = [NSSortDescriptor sortDescriptorWithKey:@"startAmout"ascending:YES];
NSMutableArray * nowArr = [NSMutableArray new];
nowArr= [arr sortedArrayUsingDescriptors:@[descriptor]];
这样排序的结果是这样的:
@[@[@"startAmout":@"10.00"],@[@"startAmout":@"11.53"],@[@"startAmout":@"15.37"],@[@"startAmout":@"15.37"],@[@"startAmout":@"17.30"],@[@"startAmout":@"5.56"]];
大家会发现前半部分都是正常的升序排列,但是唯独最后的5.56个别,大家可以尝试排序打印。
解决办法:
在字典中插入新的参数,比如:
@[@[@"startAmout":@"10.00",@"num":@"1000"],@[@"startAmout":@"11.53",@"num":@"1153"],@[@"startAmout":@"15.37",@"num":@"1537"],@[@"startAmout":@"15.37",@"num":@"1537"],@[@"startAmout":@"5.56",@"num":@"556"],@[@"startAmout":@"17.30",@"num":@"1730"]];
这样排序的结果就是正确的,核心部分的思想就是插入一个新的整形参数来排序整体数组键值,num = startAmout * 100。
如果大家还有更好排列float类型的建议,欢迎留言!!!
网友评论