まず、配列要素となるクラスを作成し、仕込みを入れます。
//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 件のコメント:
コメントを投稿