2010-05-12 2 views
1

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

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

Я использую

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 

Любое предложение?

Я благодарю вас за любую помощь.

Фабрицио

+0

Вызовите Array Parlor, и скажите: «Привет, я бы хотел заказать массив». – Jasarien

+0

Хорошо, дайте номер, и я сделаю. – Fabrizio

ответ

4

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

+0

Вы имели в виду сохранить его как NSNumber внутри массива? Я не совсем уверен, что я Понятно. Btw thanx. – Fabrizio

+0

Хорошо исправлено, большое спасибо. – Fabrizio

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]; 
Смежные вопросы