2015-03-02 3 views
-2

У меня есть массив как:Как отсортировать дату?

<__NSArrayM 0x79f3a4a0>(
{ 
    "act_date" = "02/03/2015"; 
    "act_id" = 3; 
    "act_name" = test2; 
}, 
{ 
    "act_date" = "03/03/2015"; 
    "act_id" = 4; 
    "act_name" = test3; 
}, 
{ 
    "act_date" = "01/03/2015"; 
    "act_id" = 5; 
    "act_name" = test1; 
} 
) 

я хочу, чтобы отсортировать массив с датой. я попробовал этот метод:

NSDateFormatter *formatter = [[NSDateFormatter alloc] init]; 
[formatter setDateFormat:@"MM/dd/yyyy"]; 
NSMutableArray *tempArray = [NSMutableArray array]; 

for (NSString *dateString in tblList) 
{ 
    NSDate *date = [formatter dateFromString:[dateString valueForKey:@"act_date"]]; 
    [tempArray addObject:date]; 
} 

    [tempArray sortUsingComparator:^NSComparisonResult(NSDate *date1, NSDate *date2) { 
     // return date2 compare date1 for descending. Or reverse the call for ascending. 
     return [date2 compare:date1]; 
    }]; 

Но это возвращает только массив с датой, как я могу добавить все данные с отсортированного массива дат ??

+0

Ваша проблема не в датах, а в том, что у вас есть набор словарей. См. Этот https://stackoverflow.com/questions/14193077/sorting-array-of-multiple-dictionaries –

+0

. Результат возвращает только массив с датой, потому что вы добавляете только значение «act_date» в tempArray, чтобы добавить ваш объект в tempArray. В sortUsingComparator: return [yourObject2.act_date compare yourObject1.act_date] –

+0

Вместо работы со словарями, конвертируйте их в объекты. Obj-C не является javascript, поэтому вам не следует работать с объектами, преобразованными в словари. – Sulthan

ответ

1

Я хотел бы сделать это, если вам необходимо преобразовать значения "act_date" к правильной NSDate перед сравнением:

NSDateFormatter *_dateFormatter = [[NSDateFormatter alloc] init]; 
[_dateFormatter setDateFormat:@"MM/dd/yyyy"]; 

NSArray *_yourOriginalArray = // ... 
NSArray *_sortedArray = [_yourOriginalArray sortedArrayUsingComparator:^NSComparisonResult(NSDictionary * obj1, NSDictionary * obj2) { 
    return [[_dateFormatter dateFromString:[obj2 valueForKey:@"act_date"]] compare:[_dateFormatter dateFromString:[obj1 valueForKey:@"act_date"]]]; 
}]; 

затем _sortedArray будет сортировать товары.

+0

Thx man. Моя проблема с моим Словарем .... – Gabber

1

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

NSSortDescriptor *sortDescriptor = [[NSSortDescriptor alloc] initWithKey:@"act_date" ascending:YES]; 
NSArray *sortedArray = [tblList sortedArrayUsingDescriptors:@[sortDescriptor]]; 
0

Вы можете использовать простой NSSortDescriptor

NSSortDescriptor * sortDescriptor = [[NSSortDescriptor alloc] initWithKey:@"act_date" ascending:YES selector:@selector(compare:)]; 
array = [array sortedArrayUsingDescriptors:@[sortDescriptor]]; 

Если вы хотите, вы можете добавить больше дескриптор для сортировки, например, путем act_id. Приоритет устанавливается oreder рода описателей в массиве, который вы передаете методу -sortUsingDescriptor
[EDIT]
Как отметил holex act_date является строка, и она должна быть преобразована в NSdate с помощью NSDateFormatter. Или вы просто сортируете строки.

0

Я сортировочный массив словарей с

Дата-
NSSortDescriptor *sortDescriptor = [[NSSortDescriptor alloc] initWithKey:@"act_date" ascending:NO]; 
[mArrTimeline sortUsingDescriptors:[NSArray arrayWithObject:sortDescriptor]]; 
+0

NSDate не является корректным ключом для конструкции, показанной OP – Andrea

0

Попробуйте этот код. Может быть полезно для вас.

NSString *strKey = @"act_date"; 
NSSortDescriptor *sortByName = [NSSortDescriptor sortDescriptorWithKey:strKey ascending:YES]; 

NSArray *sortDescriptors = [NSArray arrayWithObject:sortByName]; 
tempArr = (NSMutableArray *)[arr sortedArrayUsingDescriptors:sortDescriptors];