基于NSMutableArray
NSMutableDictionary
,我尝试按升序对其进行排序。该密钥称为Product Sale Price
,它从服务器返回为$350
之类的字符串。所以我将第一个字符子串到比较int值:
//Sorting function
NSInteger priceComparator(NSMutableDictionary *obj1, NSMutableDictionary *obj2, void *context){
int v1 = [[[obj1 valueForKey:@"Product Sale Price"]substringFromIndex:1] intValue];
int v2 = [[[obj2 valueForKey:@"Product Sale Price"]substringFromIndex:1] intValue];
NSLog(@"v1, v2: %i | %i",v1,v2);
if (v1 > v2){
NSLog(@"v2 is smaller: <%i>",v2);
return v2;
}
else if (v1 < v2){
NSLog(@"v1 is smaller: <%i>",v1);
return v1;
}
else
return NSOrderedSame;
}
//Somewhere in the code
arrayProduct = (NSMutableArray*)[arrayProduct sortedArrayUsingFunction:priceComparator context:nil];
NSLog(@"%@",arrayProduct);//The array is not sorted as expected, still random order
所以基本上,虽然我调试了步骤b步骤并且所有比较都是正确的,但顺序不会以某种方式受到影响。我错过了什么吗?
修改
以下是arrayProduct
的一些项目:
(
{
"Product ID" = 15119;
"Product Sale Price" = "$395";
},
{
"Product ID" = 16897;
"Product Sale Price" = "$75";
}
)
答案 0 :(得分:3)
您需要返回NSOrderedAscending
和NSOrderedDescending
,而不是v1
和v2
。如果排序以相反的顺序结束 - 交换你返回的两个中的哪一个。
答案 1 :(得分:0)
你可以使用排序描述符来排序数组,如下面的代码,这里key是要对数组进行排序的参数的关键。 例如,您希望按名称排序,然后键是“名称”
NSSortDescriptor *sortDescriptor = [[[NSSortDescriptor alloc] initWithKey:@"key" ascending:YES] autorelease];
NSArray *sortDescriptors = [[NSArray alloc]init];
sortDescriptors = [NSArray arrayWithObject:sortDescriptor];
NSArray *sortedArray;
sortedArray = [Array sortedArrayUsingDescriptors:sortDescriptors];