【Objective-C】NSArrayの要素のフィルタリング
こんな配列があります。
NSArray *numberStringArray = @[@"One", @"Two", @"Three", @"Four", @"Five"];
そのうち"T"から始まる要素だけ取得したい。
そんな時は。。。
NSPredicate *predicate = [NSPredicate predicateWithFormat:@"%K beginsWith %@", @"self", @"T"]; // predicateWithFormatに渡される値は「@"self beginsWith 'T'"」になる NSArray *numberStringArrayBeginWith_T = [numberStringArray filteredArrayUsingPredicate:predicate]; NSLog(@"numberStringArrayBeginWith_T: %@", numberStringArrayBeginWith_T);
出力ログ
numberStringArrayBeginWith_T: ( Two, Three )
です!
続いて"e"を含む要素を取得したい。
そんな時は。。。
NSPredicate *predicate = [NSPredicate predicateWithFormat:@"self contains 'e'"]; // 今回はpredicateWithFormatに直接文字列を渡してみました。 NSArray *numberStringArrayWithContain_e = [numberStringArray filteredArrayUsingPredicate:predicate]; NSLog(@"numberStringArrayWithContain_e: %@", numberStringArrayWithContain_e);
出力ログ
numberStringArrayWithContain_e: ( One, Three, Five )
デス!
要素が文字列でなく、数値だった場合。。。
NSArray *numbersArray = @[@3, @18, @20, @7, @9, @10]; NSLog(@"numbersArray: %@", numbersArray); // 10以上の要素を取得 NSPredicate *predicate = [NSPredicate predicateWithFormat:@"%K >= %d", @"self", 10]; NSArray *numbersArrayOver10 = [numbersArray filteredArrayUsingPredicate:predicate]; NSLog(@"numbersArrayOver10: %@", numbersArrayOver10);
出力ログ
numbersArrayOver10: ( 18, 20, 10 )
こんな感じでNSPredicateを利用すると色々とデータの操作ができるそうです。 NSArrayだけでなく、NSSetでも同様の操作が可能です。
参考
『詳細! Objective-C iPhoneアプリ開発 入門ノート Xcode5+iOS7対応』