15

要素の1つがdateである配列に解析されたNSDictionaryがあり、[startimeArray sortUsingSelector:@selector(compare:)];(starttimeArray)を使用してみましたが、これは昇順でのみ配置されます。降順で並べ替えるにはどうすればよいですか。ありがとう

4

6 に答える 6

38

NOを入力して配列を並べ替えるのは、昇順のパラメーターです。

NSSortDescriptor *descriptor=[[NSSortDescriptor alloc] initWithKey:@"self" ascending:NO];
NSArray *descriptors=[NSArray arrayWithObject: descriptor];
NSArray *reverseOrder=[dateArray sortedArrayUsingDescriptors:descriptors];
于 2013-01-26T20:53:43.473 に答える
20

コンパレータブロックを使用できます

NSArray *sortedArray = [array sortedArrayUsingComparator: ^(NSDate *d1, NSDate *d2) {
    return [d1 compare:d2];
}];

順序を逆にするには、日付を入れ替えるだけです

NSArray *sortedArray = [array sortedArrayUsingComparator: ^(NSDate *d1, NSDate *d2) {
    return [d2 compare:d1];
}];

または— compare:NSComparisonResultを返します。これは、実際には整数にtypedefされています。以下を参照してください—-1を掛けるだけです。

NSArray *sortedArray = [array sortedArrayUsingComparator: ^(NSDate *d1, NSDate *d2) {
    return -1* [d1 compare:d2];
}];

enum {
   NSOrderedAscending = -1,
   NSOrderedSame,
   NSOrderedDescending
};
typedef NSInteger NSComparisonResult;
于 2013-01-26T21:10:44.077 に答える
2

の組み込みreverseObjectEnumeratorメソッドを使用しますNSArray

startimeArray = [startimeArray sortUsingSelector:@selector(compare:)];
startimeArray = [[startimeArray reverseObjectEnumerator] allObjects];

配列を昇順と降順で並べ替える必要がある場合に便利です。これにより、前の並べ替えに簡単に戻ることができます。

于 2015-01-19T11:36:46.497 に答える
1

チェックされたソリューションには迅速なソリューションがあります:

let sortedArray = randomArray.sortedArrayUsingComparator { (d1, d2) -> NSComparisonResult in
    return (d1 as! NSDate).compare(d2 as! NSDate)
}
于 2016-02-08T16:01:27.003 に答える
1

Swift 3.0

swift 3.0を使用している人にとって、このDateHelperは頭痛の種を減らすでしょう。

   filteredLogs.sort(by: {
        let firstElement = $0.timeStamp! as Date
        let secondElement = $1.timeStamp! as Date
        return firstElement.compare(.isEarlier(than: secondElement))
    })

上記のコードは、私のプロジェクトの1つからのスニペットです。ヘルパークラスを使用して、配列の左側にある最新の日付でログを並べ替えます。$記号は位置パラメータです

于 2017-05-17T14:29:01.977 に答える
0

配列要素が初期化されているクラス内。

-(NSComparisonResult) compareArray: (id) element {
    Return [ArrayElement compare: [element ArrayElement]];
}



-(NSComparisonResult) compareArrayReverse: (id) element {
    Return [[element ArrayElement] compare: ArrayElement];
}

次に、startimeArrayが初期化されるクラスで:

@synthesize ArrayName;


-(void) sort: (BOOL) sel {
    if (sel) {
        [ArrayName sortUsingSelector: @selector(compareArray:)];
    } else {
        [ArrayName sortUsingSelector: @selector(compareArrayReverse:)];
    }    
}

次に、main()で:

// Sort the array. sort = TRUE - ascending order, sort = FALSE - descending order.

[startimeArray sort: FALSE];
于 2016-07-12T02:20:39.920 に答える