文字列を含む配列があります。これらの文字列の一部は空 (@"") である可能性があります。配列をフィルタリングして、空でない文字列のみを含む新しい配列を返すために、述語はどのように見える必要がありますか。
配列 A: {"A","B","","D"} -> フィルター -> 配列 B: {"A","B","D"}
また、これを返す必要があります:
配列 A: {"","","",""} -> フィルター -> 配列 B: {}
文字列を含む配列があります。これらの文字列の一部は空 (@"") である可能性があります。配列をフィルタリングして、空でない文字列のみを含む新しい配列を返すために、述語はどのように見える必要がありますか。
配列 A: {"A","B","","D"} -> フィルター -> 配列 B: {"A","B","D"}
また、これを返す必要があります:
配列 A: {"","","",""} -> フィルター -> 配列 B: {}
SELF != ''
の配列のみをフィルタリングする場合は、述語を使用しますNSString
。NSString
これは、空の文字列と正確に等しくないすべてに一致します。
NSPredicate *predicate = [NSPredicate predicateWithFormat:@"SELF != ''"];
NSArray *filteredArray = [array filteredArrayUsingPredicate:predicate];
コード例:
NSArray *array = @[@"A", @"B", @"", @"C", @"", @"D"];
NSPredicate *predicate = [NSPredicate predicateWithFormat:@"SELF != ''"];
NSArray *filteredArray = [array filteredArrayUsingPredicate:predicate];
NSLog(@"Input array: %@\nFiltered array: %@", [array componentsJoinedByString:@","], [filteredArray componentsJoinedByString:@","]);
この出力を与える
Input array: A,B,,C,,D
Filtered array: A,B,C,D
編集: Joris Kluivers が predicate format のソリューションを投稿しましlength > 0
た。これはおそらくはるかに高速になるため、空の文字列を削除するためのより良い解決策です。
NSPredicate *predicate = [NSPredicate predicateWithFormat:@"SELF beginswith[c]%@",searchText];
[arrSearched removeAllObjects];
[arrSearched addObjectsFromArray:[self.arrContent filteredArrayUsingPredicate:predicate]];
ここで arrContent は元の配列で、arrSearched は検索後の出力配列です。