0

我允许用户能够按价格(int)或距离(float)进行排序。

我有一个 NSdictionary 对象的 NSMutableArray 存储数据,如下所示:

({"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]];
}

我的问题是考虑距离是字典中的一个字符串,价格是一个整数,当我传入“距离”的键时,如何修改我的函数以实际在浮点数中进行排序,而当我传入“询问价格”

提前致谢

4

2 回答 2

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]];
}
于 2013-02-03T08:01:02.127 回答
0

这可能是不可能的,因为您无法控制的函数不知道如何将 NSString 转换为原始数据类型。您几乎剩下 3 个选项:

1)想出自己的排序算法(用谷歌不太难)

2) 将距离更改为 int/float

3)创建一个 NSSortDescriptor 的子类并覆盖排序方法(与第一选择的结果几乎相同,除了您使用的代码是可重用的

于 2013-02-03T07:52:13.630 回答