2014-02-20 2 views
1

У меня есть массив с несколькими словарными как:Сортировка массива с использованием NSSortDescriptor не работает

{ 
    highRate = "600.49"; 
    hotelId = 439607; 
    hotelRating = "2.5"; 
    latitude = "12.97153"; 
    longitude = "80.15096"; 
    lowRate = "600.49"; 
    name = "Hotel Kingss Park"; 
    proximityDistance = "17.999475"; 
    thumbNailUrl = "http://images.travelnow.com/hotels/7000000/6510000/6500300/6500296/6500296_3_t.jpg"; 
    tripAdvisorRating = "4.0"; 
}, 
    { 
    highRate = "990.0"; 
    hotelId = 327929; 
    hotelRating = "2.0"; 
    latitude = "13.06931"; 
    longitude = "80.2706"; 
    lowRate = "450.45"; 
    name = "Mallika Residency"; 
    proximityDistance = "1.6274245"; 
    thumbNailUrl = "http://images.travelnow.com/hotels/3000000/2960000/2958400/2958303/2958303_2_t.jpg"; 
    tripAdvisorRating = "2.5"; 
} 

Я пытаюсь отсортировать этот массив с помощью lowRate ключа.

NSSortDescriptor *rating_Sort = [NSSortDescriptor sortDescriptorWithKey:@"lowRate" ascending:NO]; 
NSArray *descriptorArray = [NSArray arrayWithObject:rating_Sort]; 

NSArray *sortedArray = [self.tblDisplayArray sortedArrayUsingDescriptors:descriptorArray]; 

здесь self.tblDisplayArray мой массив.

Но не получается правильный сортированный массив в результате.

Почему это происходит?

ответ

3

изменения этого

NSSortDescriptor *rating_Sort = [NSSortDescriptor sortDescriptorWithKey:@"lowRate.doubleValue" ascending:NO]; 

и он работает отлично.

5

Это все строки, поэтому он пытается отсортировать их по алфавиту не численно. Попробуйте также:

NSSortDescriptor *desc = [[NSSortDescriptor alloc]initWithKey:@"doubleValue" ascending:YES]; 

или используя NSNumbers вместо NSString ... @() вместо @ "".

@Rajesh правильный, не все ваши числа целые, поэтому вы должны использовать doubleValue, я обновил код!

Надеюсь, это поможет! :)

0

У вас есть массив строк, который фактически является двойным значением. Таким образом, вы сортируете дескрипторы, как показано ниже.

NSSortDescriptor *aSortDescriptor = [NSSortDescriptor sortDescriptorWithKey:@"sort" ascending:YES comparator:^(id obj1, id obj2) { 
    if ([obj1 doubleValue] < [obj2 doubleValue]) { 
     return (NSComparisonResult)NSOrderedAscending; 
    } 
    return (NSComparisonResult)NSOrderedSame; 
    }]; 
    sortedArray = [yourArray sortedArrayUsingDescriptors:[NSArray arrayWithObject:aSortDescriptor]]; 
0

Как @Georgegreen указывали они все строки, так что пытается отсортировать их в алфавитном порядке, не численно.

но вы должны использовать float или double, чтобы быть точным, а не int.

NSSortDescriptor *desc = [[NSSortDescriptor alloc]initWithKey:@"doubleValue" ascending:YES]; 
0

Или просто сделать:

NSArray *sortedArray = [[yourTempArray sortedArrayUsingSelector:@selector(caseInsensitiveCompare:)]; 
Смежные вопросы