Как заказать массив - PullRequest
1 голос
/ 12 мая 2010

Я получил массив в своем приложении, и мне нужно упорядочить по одному из его ключей.

По сути, приложение использует где-то широту и долготу, вычисляет расстояние от моей фактической позиции и создает массив, содержащий ключ, называемый «расстояние».

Я использую

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

Есть предложения?

Заранее благодарю за любую помощь.

Фабрицио

Ответы [ 2 ]

4 голосов
/ 12 мая 2010

Это выглядит как правильный порядок - если ваше значение расстояния является строкой. Чтобы получить числовой порядок, вы должны сохранить его как NSNumber.

0 голосов
/ 12 мая 2010

Вы должны иметь возможность использовать пользовательскую функцию сортировки, которая учитывает числовые значения.

(теперь я предполагаю, что клавиша «расстояния» ваших объектов - 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];
...