如何按浮动距离或作为int的价格进行排序?

时间:2013-02-03 07:18:54

标签: ios nsmutablearray nssortdescriptor

我允许用户能够按价格(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”的关键

提前致谢

2 个答案:

答案 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的子类并覆盖排序方法(与第一个选择几乎相同的结果,除了您使用的代码是可重用的