まず、配列要素となるクラスを作成し、仕込みを入れます。
//ArrayElement.h #import <Foundation/Foundation.h> @interface ArrayElement : NSObject { NSString *order; } @property (nonatomic, retain) NSString *order; - (id)initWithOrder:(NSString *)order; + (NSArray *)sort; @end //ArrayElement.m #import "ArrayElement.h" @implementation ArrayElement @synthesize order; - (id)initWithOrder:(NSString *)aOrder { self = [super init]; if (self != nil) { order = [aOrder copy]; } return self; } - (NSComparisonResult)compare:(ArrayElement *)anotherArrayElement { //self と anotherArrayElement を比較 NSComparisonResult result = [self.order compare:anotherArrayElement.order]; //降順 if (result == NSOrderedAscending) return NSOrderedDescending; else if (result == NSOrderedDescending) return NSOrderedAscending; else return NSOrderedSame; } + (NSArray *)sort:(NSArray *)originalArray { return (NSArray *)[originalArray sortedArrayUsingSelector:@selector(compare:)]; }
使い方は次の通り。
NSArray *sortedArray = [ArrayElement sort:originalArray];このサンプルコードでは、 originalArray に格納されている ArrayElement インスタンスが各々もつ変数 order を比較して、降順に並べ替えられた後の ArrayElement インスタンスの配列が、 sortedArray に格納されます。
オリジナルのソートをするためには、ArrayElementのcompareメソッド内で、self と 引数 anotherArrayElement を比較する箇所を独自の実装にして、適切に
- NSOrderedDescending (self より anotherArrayElement の方が小さい)
- NSOrderedAscending (self より anotherArrayElement の方が大きい)
- NSOrderedSame (self と anotherArrayElement は同じ)
0 件のコメント:
コメントを投稿