要素の1つが日付である配列に解析されたNSDictionaryがあります。[startimeArray sortUsingSelector:@selector(compare:)];
(starttimeArray)を使用してみましたが、日付は昇順でのみ配置されます。降順で並べ替える方法ありがとう
[〜#〜] no [〜#〜]を昇順に配置して、配列を並べ替えます。
NSSortDescriptor *descriptor=[[NSSortDescriptor alloc] initWithKey:@"self" ascending:NO];
NSArray *descriptors=[NSArray arrayWithObject: descriptor];
NSArray *reverseOrder=[dateArray sortedArrayUsingDescriptors:descriptors];
コンパレータブロックを使用できます
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;
reverseObjectEnumerator
の組み込みNSArray
メソッドを使用します
startimeArray = [startimeArray sortUsingSelector:@selector(compare:)];
startimeArray = [[startimeArray reverseObjectEnumerator] allObjects];
これは、配列を昇順および降順でソートする必要がある場合に役立ちます。これにより、前のソートに簡単に戻ることができます。
Swift 3.0
Swift 3.0 this DateHelper を使用している人にとっては、頭痛の種を減らすことができます。
filteredLogs.sort(by: {
let firstElement = $0.timeStamp! as Date
let secondElement = $1.timeStamp! as Date
return firstElement.compare(.isEarlier(than: secondElement))
})
上記のコードは、私のプロジェクトの1つからのスニペットです。ヘルパークラスを使用して、配列の左側にある最新の日付でログを並べ替えます。 $記号は 位置パラメータ です
チェックされたソリューションのSwiftソリューションがあります:
let sortedArray = randomArray.sortedArrayUsingComparator { (d1, d2) -> NSComparisonResult in
return (d1 as! NSDate).compare(d2 as! NSDate)
}
配列要素が初期化されているクラス。
-(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];