1

バブルソートで日付を並べ替えました。ただし、テストの途中で、最後の行がソートされていないことに気付きました。誰でも助けることができますか?:(これは、ソートのためにコードを実行するために必要なことの基礎であるため、私にとって非常に重要です:

NSInteger count = [sortingArray count];
        for(int a = 0 ; a < count; a++) {
            for(int b = a+1 ; b < count; b++) {
            NSDictionary *dic = [items objectAtIndex:a];
            NSDictionary *dic2 = [items objectAtIndex:b];
            NSString *dateString = [dic valueForKey:@"date"];
            NSString *dateString2 = [dic2 valueForKey:@"date"];
            //NSLog(@"DATE: %@", dateString);   //date is the string representation.

            NSDateFormatter *dateFormatter = [[NSDateFormatter alloc]init];
            [dateFormatter setDateFormat:@"dd/MM/yyyy"];
            NSDate *endDate = [dateFormatter dateFromString:dateString];
            NSDate *endDate2 = [dateFormatter dateFromString:dateString2];

            NSDate *currDate = [NSDate date];
            NSString *startDateString = [dateFormatter stringFromDate:currDate];
            NSDate *startDate = [dateFormatter dateFromString:startDateString];
            [dateFormatter release];

            NSCalendar *gregorianCalendar = [[NSCalendar alloc] initWithCalendarIdentifier:NSGregorianCalendar];
            NSDateComponents *comp = [gregorianCalendar components: NSDayCalendarUnit 
                                                          fromDate:startDate 
                                                            toDate:endDate
                                                           options:0];


            NSDateComponents *comp2 = [gregorianCalendar components: NSDayCalendarUnit 
                                                           fromDate:startDate
                                                             toDate:endDate2
                                                            options:0];
            [gregorianCalendar release];

            NSInteger compareDay = [comp day];    
            NSInteger compareDay2 = [comp2 day];  
            NSString *dayString = [NSString stringWithFormat:@"%d", compareDay];
                NSString *dayString2 = [NSString stringWithFormat:@"%d", compareDay2];
            NSLog(@"string 1%@", dayString); 
                NSLog(@"string 2 ----%@", dayString2); 

            if (compareDay > compareDay2){
                [sortingArray exchangeObjectAtIndex:a withObjectAtIndex:b];
            } 
        }    //b loop
    }   //a loop
        NSInteger counterIndex = [sortingArray count];
        for(int c = 0; c < counterIndex ; c++) {
            [temp addObject:[sortingArray objectAtIndex:c]];
        }        

今のところどのように見えますか

4

2 に答える 2

1

最後に、NSSortDescriptor を使用してソートしました。最初はそれを使用しましたが、ディスプレイには何も表示されないため、日付の並べ替えを行うために独自の大きなコードのチャンクを作成しました。とにかく私が使用した方法:

NSLog(@"Before sorting: %@", temp);  // What I have is a NSMutableArray called temp
    NSSortDescriptor *dateSortDescriptor = [NSSortDescriptor sortDescriptorWithKey: @"date" ascending: YES];

    NSArray *sortedArray = [temp sortedArrayUsingDescriptors:[NSArray arrayWithObject: dateSortDescriptor]];
    NSLog(@"After Sorting: %@", sortedArray);        
    NSMutableArray *afterSorting = [[(NSArray*)sortedArray mutableCopy]autorelease];

私がしたことは、テーブルに挿入する前に NSArray を NSMutableArray に変換することだけでした:)これが他の人の助けになることを願っています。

于 2012-07-26T14:42:44.887 に答える
1

次のように最初の for ループを使用します。

    for(int a = 0 ; a < count-1; a++) { // Allow uptil second last position in array
        for(int b = a+1 ; b < count; b++) {  // Allow uptil last position in array

見逃したのはこれだと思います。これを試してみてください。これがうまくいくことを願っています。

于 2012-07-25T16:18:45.850 に答える