【问题标题】:Sort by distance按距离排序
【发布时间】:2011-10-14 14:56:29
【问题描述】:

我在一个数组中有一组字典。我在表格视图中显示这些数据。在表格视图中,我计算到每个对象的距离并将其显示在单元格中。

数据需要能够根据升序距离进行排序,显然是每个用户位置 解决这个问题的最佳方法是什么?我想把所有的字典分开并插入距离,然后松开 NSSortDescriptor,问题是,我太懒了。

现在我只是用 indexPath.row 遍历所有数据并显示它。

【问题讨论】:

    标签: objective-c ios cocoa-touch


    【解决方案1】:

    您可以使用基于块的比较器 API 轻松排序。

    NSArray *rawData = [NSArray arrayWithContentsOfFile:pathDoc];
    
    rawData = [rawData sortedArrayUsingComparator: ^(id a, id b) {
    
        CLLocationDistance dist_a= [[a objectsForKey:@"coordinate"] distanceFromLocation: userPosition];
        CLLocationDistance dist_b= [[b objectsForKey:@"coordinate"] distanceFromLocation: userPosition];
        if ( dist_a < dist_b ) {
            return NSOrderedAscending;
        } else if ( dist_a > dist_b) {
            return NSOrderedDescending;
        } else {
            return NSOrderedSame;
        }
    }];
    

    您应该很容易通过 google 找到 calculate_distance(user_position, a); 的实现。

    【讨论】:

    • 我已经在用 distanceFromLocation 计算距离:但是对于一个位置,我需要 NSArray 中字典中的纬度和经度。我用 for() 和 NSDictionary *dict = [array objectAtIndex:i] 循环了这个,但是我如何将它与基于块的比较器 api 相匹配?
    • 这里还有一些代码:pastebin.com/dndv7dk1 进行了一些编辑以保持可读性。
    • 是的,很好的解决方案!谢谢!
    • 确定您将 rawData 关联到一个属性。它看起来怎么样?
    • 已修复!谢谢vikingosegundo!我按了 100 次投票,太糟糕了,它只能工作一次。
    猜你喜欢
    • 2013-11-11
    • 2018-02-02
    • 2015-04-27
    • 1970-01-01
    • 2013-12-05
    • 2014-05-08
    • 2017-07-29
    • 1970-01-01
    • 2016-01-02
    相关资源
    最近更新 更多