2013-08-12 5 views
1

날짜와 시간을 기반으로 배열을 정렬하려고하는데 두 날짜가 사전에 다른 값으로 올 때 배열을 기준으로 정렬 할 수 있습니다.두 사전 키를 사용하여 날짜와 시간을 기준으로 배열 정렬

그래서 날짜 형식 "yyyy-MM-dd"에 문자열로 오는 시간이 "HH:mm"

시간 값이 문자열로 키 "starts"로 제공 형식의 문자열로 온다 ' "HH : mm"'형식입니다.

나는 어떻게 든 두 개의 문자열을 합쳐서 'yyyy-MM-dd HH:mm'에 결합 할 필요가 있음을 알고있다.

-(NSMutableArray *)sortArrayBasedOndate:(NSMutableArray *)arraytoSort 
{ 
    NSDateFormatter *formatter = [[NSDateFormatter alloc] init]; 
    [formatter setDateFormat:@"yyyy-MM-dd"]; 

    NSComparator compareDates = ^(id string1, id string2) 
    { 
     NSDate *date1 = [formatter dateFromString:string1]; 
     NSDate *date2 = [formatter dateFromString:string2]; 

     return [date1 compare:date2]; 
    }; 


    NSSortDescriptor * sortDesc1 = [[NSSortDescriptor alloc] initWithKey:@"start_date" ascending:YES comparator:compareDates]; 
    [arraytoSort sortUsingDescriptors:[NSArray arrayWithObjects:sortDesc1, nil]]; 


    return arraytoSort; 
} 

어떻게하면이 문제를 해결할 수 있습니까?

답변

9

sortUsingDescriptors:이 배열을 취하는 이유는 시간을 정렬해야하기 때문입니다.

-(NSMutableArray *)sortArrayBasedOndate:(NSMutableArray *)arraytoSort 
{ 
    NSDateFormatter *fmtDate = [[NSDateFormatter alloc] init]; 
    [fmtDate setDateFormat:@"yyyy-MM-dd"]; 

    NSDateFormatter *fmtTime = [[NSDateFormatter alloc] init]; 
    [fmtTime setDateFormat:@"HH:mm"]; 

    NSComparator compareDates = ^(id string1, id string2) 
    { 
     NSDate *date1 = [fmtDate dateFromString:string1]; 
     NSDate *date2 = [fmtDate dateFromString:string2]; 

     return [date1 compare:date2]; 
    }; 

    NSComparator compareTimes = ^(id string1, id string2) 
    { 
     NSDate *time1 = [fmtTime dateFromString:string1]; 
     NSDate *time2 = [fmtTime dateFromString:string2]; 

     return [time1 compare:time2]; 
    }; 

    NSSortDescriptor * sortDesc1 = [[NSSortDescriptor alloc] initWithKey:@"start_date" ascending:YES comparator:compareDates]; 
    NSSortDescriptor * sortDesc2 = [NSSortDescriptor sortDescriptorWithKey:@"starts" ascending:YES comparator:compareTimes]; 
    [arraytoSort sortUsingDescriptors:@[sortDesc1, sortDesc2]]; 

    return arraytoSort; 
} 
0

하나의 타임 스탬프에 둘 다 연결하십시오. 그런 다음 참조 날짜부터의 TimeInterVal을 가져 와서이 숫자로 정렬하십시오.

관련 문제