0

NSArray 関数sortedArrayUsingComparatorを使用して NSDictionaries の NSMutableArray をソートするためにいくつかの助けを借りて管理しましたが、ソートしたい配列は 1 つの値に基づいているだけではありません。

startdate と finishdate の 2 つの値があります。現在、startdate でのみ並べ替えているため、enddate を見て、それらが正しくないことがわかるまで、配列が並べ替えられているように見えます。

現在の形式。

(start / end)
0 / 1996
0 / 1991
1992 / 1995
1993 / 1999
1993 / 1991

実際に私がこのようなことを達成したいとき

(start / end)
0 / 1991
0 / 1996
1992 / 1995
1993 / 1991
1993 / 1999

これは現時点での私のコードです

 // try sorting years
    NSString const * myStartDate = @"DATESTART";
    NSString const * myEndDate = @"DATEEND";

    NSArray *sortedArray = [resultantArray sortedArrayUsingComparator:^NSComparisonResult(id a, id b) {
        NSDictionary *dictA = a;
        NSDictionary *dictB = b;

        NSNumber *startDate1 = dictA[myStartDate];
        NSNumber *startDate2 = dictB[myStartDate];

        return [startDate1 compare:startDate2];

    }];

これにより、私が提供した最初の並べ替えの例が生成されます。少しの助けを借りて望んでいるのは、開始日と終了日が同じものを順番に並べ替えることです。

どんな助けでも大歓迎です。

4

1 に答える 1

0

配列内の NSDictionarys の 2 つの要素を使用して NSMutableArray をソートする方法を最初に理解しようとしたとき、NSSortDescriptors を理解していなかったので、ここに示されている例を見落としていました

https://developer.apple.com/library/ios/#documentation/Cocoa/Conceptual/SortDescriptors/Articles/Creating.html#//apple_ref/doc/uid/20001845-BAJEAIEE

私の問題については、リスト 2が完璧な解決策でした。

これが私の解決策です。

NSSortDescriptor *yearStartDesc = [[NSSortDescriptor alloc] initWithKey:@"YEARSTART" ascending:YES];
NSSortDescriptor *yearEndDesc = [[NSSortDescriptor alloc] initWithKey:@"YEARFINISH" ascending:YES];
NSArray *sortDescriptors = @[yearStartDesc, yearEndDesc];
NSArray *newSortedArray = [unsortedArray sortedArrayUsingDescriptors:sortDescriptors];

NSLog(@"%@", newSortedArray);

私を助けてくれたみんなに感謝します。

于 2013-04-28T23:00:30.567 に答える