从数组中查找最近的位置(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
实例,因为CLLocationCoordinate2D
是struct
,而不是引用类型。如果您真的设法将非对象存储在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)[关闭]的主要内容,如果未能解决你的问题,请参考以下文章