从数组中查找最近的位置(iOS)[关闭]

Posted

技术标签:

【中文标题】从数组中查找最近的位置(iOS)[关闭]【英文标题】:Finding the closest location from an array (iOS) [closed] 【发布时间】:2016-01-22 12:17:33 【问题描述】:

我需要从存储CLLocationCoordinate2D 对象的NSMutableArray 中找到20 个壁橱商店并将其添加到另一个数组中。

知道我该怎么做吗? 谢谢!

【问题讨论】:

【参考方案1】:

使用distanceFromLocation:怎么样?按距离对数组进行排序,取第一个元素。

PS:我假设您实际上存储了CLLocation 实例,因为CLLocationCoordinate2Dstruct,而不是引用类型。如果您真的设法将非对象存​​储在NSArray 中,您可以轻松地从纬度和经度构造CLLocation 对象。

编辑

简单的快速示例

var a = [CLLocation]() // this would be your actual array
let loc = CLLocation() // this would be your current location
a.sortInPlace  (l1, l2) -> Bool in
    l1.distanceFromLocation(loc) <= l2.distanceFromLocation(loc)

let smallest = a.first? // this would be your closest value.

在Objective-C中,相关方法是sortUsingComparator: on NSMutableArray,如下所示:

NSMutableArray* a = [NSMutableArray new];
CLLocation* loc = [CLLocation new];
[a sortUsingComparator:^NSComparisonResult(id  _Nonnull obj1, id  _Nonnull obj2) 
// Edit 3: verbose comparator.
    float dist1 =[(CLLocation*)obj1 distanceFromLocation:loc];
    float dist2 = [(CLLocation*)obj2 distanceFromLocation:loc];
    if (dist1 == dist2) 
        return NSOrderedSame;
    
    else if (dist1 < dist2) 
        return NSOrderedAscending;
    
    else 
        return NSOrderedDescending;
    
];

// Edit 2
CLLocation* smallest = a.firstObject;
    NSMutableArray* closest = [NSMutableArray new];
for (int i = 0; i < 20; i++) 
    [closest addObject:a[i]];

【讨论】:

你能给我一个代码示例吗?顺便说一句,我将来自名为Store(继承自NSObject)的自定义类存储在数组对象中,该类具有地址(NSString)、名称(NSString)和geoPoint(CLLocationCoordinate2D)。 谢谢!但我不认为我真的理解。您能否发布一个示例,从大约 1700 家商店的数组中找到距用户当前位置最近的 20 家商店?非常感谢您的帮助! 我确实再次编辑了我的答案。但这应该是没有道理的。 但不是从用户当前位置,而是从一个商店到另一个。 我确实再次更新了答案,以使其对正在发生的事情更加详细。

以上是关于从数组中查找最近的位置(iOS)[关闭]的主要内容,如果未能解决你的问题,请参考以下文章

SQL(MySQL,PostgreSQL,SQL Server)的快速最近位置查找器[关闭]

地理位置异步iOS [关闭]

无法直接从 iOS 运行查找菜单? [关闭]

查找与给定经度/纬度最近的城市[关闭]

如何从IOS中的字典数组中删除重复性? [关闭]

在javascript中查找和区分单词[关闭]