2012年1月13日金曜日

NSArrayの内容をフィルタリングして取り出す

配列からあるものを取り出したい場合、if文で回したり自前で処理を書いたりする必要がありますが、NSPredicateを使うととても便利になります。
サンプルソース
#import 

int main(int argc, const char * argv[])
{

    @autoreleasepool {
        id tst = [NSArray arrayWithObjects:@"one",@"two",@"three",@"four",@"five",@"six",nil]; //oneからsixまでのObject配列を作成
        id pred = [NSPredicate predicateWithFormat:@"self BEGINSWITH 'f'"];
        id filtered = [tst filteredArrayUsingPredicate:pred];
        NSLog(@"%@",filtered);
        return 0;
        
    }
    return 0;
}
NSPredicateの書き方
@"キーパス 演算子 リテラル"
キーパスとは、演算対象の要素をことを差し、配列に保管されてるObject自体を指す場合はself、長さなどそれぞれの性質でフィルタリングを行う場合はlengthなどと書きます。
演算子の種類文などで使われる演算子に加えて下記の演算子を使います
BETWEEN-一定の範囲を指定し、指定された数の間の文字数のObjectを出力
【例】
id bet = [NSArray arrayWithObjects:[NSNumber numberWithInt:2],
[NSNumber numberWithInt:5],nil];
id pred = [NSPredicate predidateWithFormat:@"length BETWEEN %@",bet];
BEGINSWITH、ENDWITH-指定のリテラルから始まる/終わる要素を取り出す
CONTAINS-指定のリテラルが含まれるもののみを取り出す
LIKE-*や?などのワイルドカードをつかった取り出し
MATCHES-正規表現や完全マッチしたものを取り出す
フィルタリングを行う処理を自前で書かなくても指定するだけで抽出してくれるので便利です

No response to “NSArrayの内容をフィルタリングして取り出す”

Leave a Reply