我创建了一个显示用户当前位置数据的应用程序。 我想在基于用户最小距离的基础上对它们进行排序。 我知道我需要使用这种功能:
[userLocationd istanceFromLocation:cameraLocation];
但是,之后我该怎么办?我应该在距离之后对每个人进行排序并将它们放入一个数组中,但是如何根据用户的最小位置获取重新排列每个单元格? (的cellForRowAtIndexPath)
也;我还没有真正弄清楚如何找到用户的位置。我就是这样,但如果有人指出我正确的方向,那会很有帮助。
如何将数组排序到最小距离到最大位置?
我使用过此代码。
CLLocation *location1 = [[[CLLocation alloc] initWithLatitude:someLatitude longitude:someLongitude] autorelease];
CLLocation *location2 = [[CLLocation alloc] initWithLatitude:coordinate.latitude longitude:coordinate.longitude];
float target = [location2 distanceFromLocation:location1];
target = target / 1000;
提前致谢!
答案 0 :(得分:0)
对模型中的数组进行排序,使其符合您想要的距离顺序,然后在tableview上调用重新加载。然后,这将从数据模型中刷新,您的列表将按正确的顺序排列。
答案 1 :(得分:0)
我发现解决方案使用此代码它将完美无缺
uint smallest[5];
NSMutableArray *array = [[NSMutableArray alloc] initWithObjects:[NSNumber numberWithDouble:0.5], [NSNumber numberWithDouble:0.25], [NSNumber numberWithDouble:1], [NSNumber numberWithDouble:0.75], [NSNumber numberWithDouble:0.15], [NSNumber numberWithDouble:0.85], [NSNumber numberWithDouble:0.95], [NSNumber numberWithDouble:0.32], [NSNumber numberWithDouble:0.21], [NSNumber numberWithDouble:0.05], nil];
// declare flags
uint flags[array.count];
// initialize flags
for(uint i = 0; i < [array count]; i++)
flags[i] = 0;
for(int i = 0; i < 5; i++)
{
smallest[i] = -1;
for(int j = 0; j < [array count]; j++)
{
// check flag
if(!flags[j])
{
if(smallest[i] == -1 ||
[[array objectAtIndex:smallest[i]] doubleValue] > [[array objectAtIndex:j] doubleValue])
{
// reset flag for previous index
if(smallest[i] != -1)
flags[smallest[i]] = 0;
// set flag for current index
flags[j] = 1;
smallest[i] = j;
}
}
}
}
for(uint i = 0; i < 5; i++)
NSLog(@"Smallest[%u]: %u -> %f", i, smallest[i], [[array objectAtIndex:smallest[i]] doubleValue]);
如果有任何问题,请链接到专门针对原始开发者MatthewD
的此问题