macOS/iOS API解説

iOS , Mac アプリケーション開発のために使われる主要フレームワークの日本語情報です。2010年代に書かれた内容です。今後更新はありません。

目次

-sortedArrayUsingSelector:

INDEX>Foundation>NSArray>sortedArrayUsingSelector:

配列内の要素を比較して、昇順にソートされた配列を返します

編集時バージョン OS X 10.8,iOS6.1

apple(mac)
apple(iOS)

-(NSArray *)sortedArrayUsingSelector:(SEL)comparator

解説

配列内の要素を比較して、昇順にソートされた配列を返します。
NSStringの-caseInsensitiveCompare-compareなどNSComparisonResultを返すメソッドが使えます。
比較関数メソッドは2つの要素を比較してレシーバが引数よりも小さい時はNSOrderedAscendingを、大きい時はNSOrderedDescendingを、同じ時はNSOrderedSameを返すようにします。

文字列の比較の場合、NSStringでcompare:が定義されているので以下の要領でソートした新しい配列を得ることができます。

NSArray *newArray = [theArray sortedArrayUsingSelector:@selector(compare:)];

返り値

( NSArray * )

配列(NSArrayまたはそのサブクラス)

引数

( SEL )comparator

比較するためのメソッド

クラス

NSArray

Instance Methods

使用可能

10.0
iOS2.0

例文

#pragma mark sortedArrayUsingSelector:

-(void)method021
{
    
    NSArray *ar =[[NSArray alloc] initWithObjects:@"aaa",@"cccc",@"bbb",@"a",nil] ;
    
    NSArray *retArr = [NSArray alloc] ;
    
    //普通に
    retArr = [ar sortedArrayUsingSelector:@selector(compare:)];
    NSLog(@"021 compare: %@",[retArr description]);
    // 021 compare: (a,aaa,bbb,cccc)
    
    //NSString+Extractとしてカテゴリを作っている。comparePlus:というメソッドを作成済み。
    //これは単に文字の長さが長いかを比べるメソッド
    retArr = [ar sortedArrayUsingSelector:@selector(compareLength:)];
    
    NSLog(@"021 %@",[retArr description]);
    //=>021 (cccc,aaa,bbb,a)
}

比較メソッドはそれぞれの要素に対して送られる。上記の場合はNSStringなので、NSStringのカテゴリとしてcompareLength:という比較のためのメソッドを作った。
自分と他の文字の長さを比較してNSComparisonResultを返すだけのもの。
【NSString+Extract.h】

#import <Foundation/Foundation.h>

@interface NSString (Extract)
- (NSComparisonResult)compareLength:(NSString *)otherString;
@end

【NSString+Extract.m】

#import "NSString+Extract.h"

@implementation NSString (Extract)

//文字列の長さか長いかどうかの比較
- (NSComparisonResult)compareLength:(NSString *)otherString
{
    
    
     if ([self length] > [otherString length]) {
     return NSOrderedAscending;
     } else if ([self length] < [otherString length]) {
     return NSOrderedDescending;
     }
    
    return NSOrderedSame;
}
@end