1

日付と時刻に基づいて配列をソートしようとしています。両方の時刻が辞書の別の値として来る日付に基づいて配列を正常にソートできます。

したがって、日付は形式の文字列"yyyy-MM-dd"として、時刻は形式の文字列として入力されます"HH:mm"

時間値は、"starts"文字列 '"HH:mm"' 形式でキーに入力されます。

2 つの文字列を結合する必要があることはなんとなくわかって'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;
}

どうすればこの問題を解決できますか?

4

2 に答える 2

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;
}
于 2013-08-12T20:17:19.600 に答える
0

両方を 1 つのタイムスタンプに連結します。次に、参照日以降の TimeInterVal を取得し、この番号で並べ替えます

于 2013-08-12T20:14:48.400 に答える