如何订购数组

时间:2010-05-12 14:40:23

标签: iphone iphone-sdk-3.0 nsarray nssortdescriptor

我的应用程序中有一个数组,我需要通过其中一个键来订购。

应用程序的基本操作是将纬度和经度放在某处,计算距离我实际位置的距离,并创建一个包含一个名为“距离”的键的数组。

我正在使用

myArray sortUsingDescriptors:
    [NSArray arrayWithObject:[[[NSSortDescriptor alloc] initWithKey:@"distance" ascending:YES] autorelease]]];

我不确定它是否正常工作,我的意思是第一批结果是有序的,但后来显示的距离更接近前一个,例如:

0.8 km
1.6 km
1.9 km
10053.9 km
1098.0 km
2372.0 km
470.5 km

有什么建议吗?

我提前感谢您提供任何帮助。

的Fabrizio

2 个答案:

答案 0 :(得分:4)

如果你的距离值是一个字符串,那看起来就像一个有效的排序。要获得数字排序,您应将其保存为NSNumber。

答案 1 :(得分:0)

您应该能够使用尊重数值的自定义排序功能。

(我现在假设对象的“距离”键是NSString

static NSInteger numericCompare(id first, id second, void* context)
{
    return [(NSString*)[first distance] compare:[second distance] options:NSCaseInsensitiveSearch | NSNumericSearch];
}

现在,您可以使用NSArray

中的排序方法获取已排序的数组
NSArray* sortedArray = [myArray sortedArrayUsingFunction:numericCompare context:NULL];