我允许用户能够按价格(int)或距离(浮动)进行排序。
我有一个NSMutableArray的NSdictionary对象,它们存储数据如下:
({"asking_price" = 588832;
distance = "2.0250673476224";
id = 510cc41cc7e24c6c6d000000;
"number_of_bathrooms" = 2; )}
我的排序功能如下:
+(void) sort:(NSMutableArray *)classifieds:(NSString *)key:(Boolean)isAscending
{
NSSortDescriptor *sortDescriptor = [[NSSortDescriptor alloc] initWithKey:key ascending:isAscending];
[classifieds sortUsingDescriptors:[NSArray arrayWithObject:sortDescriptor]];
}
我的问题是考虑距离是字典中的一个字符串,而价格是一个int,当我传入“距离”键时,如何修改我的函数实际上在浮点数中进行排序,当我传入一个“ask_price”的关键
提前致谢
答案 0 :(得分:3)
+(void) sort:(NSMutableArray *)classifieds:(NSString *)key:(Boolean)isAscending
{
NSSortDescriptor *sortDescriptor;
if ([key isEqualToString:@"distance"])
{
sortDescriptor = [[NSSortDescriptor alloc] initWithKey:key ascending:isAscending comparator:^NSComparisonResult(id obj1, id obj2) {
if ([obj1 floatValue] < [obj2 floatValue])
return NSOrderedAscending;
else
return NSOrderedDescending;
}];
}
else
{
sortDescriptor = [NSSortDescriptor sortDescriptorWithKey:key ascending:isAscending];
}
[classifieds sortUsingDescriptors:[NSArray arrayWithObject:sortDescriptor]];
}
答案 1 :(得分:0)
这可能不可能作为您无法控制的函数,不知道如何将NSString转换为基本数据类型。你剩下3个选择:
1)提出自己的排序算法(谷歌不太难)
2)改变到int / float的距离
3)创建NSSortDescriptor的子类并覆盖排序方法(与第一个选择几乎相同的结果,除了您使用的代码是可重用的