2

我有一个包含字符串的数组。其中一些字符串可能为空 (@"")。谓词必须是什么样子才能过滤数组并返回一个仅包含非空字符串的新数组:

数组 A: {"A","B","","D"} -> 过滤器 -> 数组 B: {"A","B","D"}

它还应该返回这个:

数组 A:{"","","",""} -> 过滤器 -> 数组 B:{}

4

3 回答 3

10

SELF != ''如果您只过滤 s 数组,请使用谓词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 发布了带有谓词格式的解决方案length > 0。这可能是仅用于删除空字符串的更好解决方案,因为它可能会更快。

于 2013-05-31T08:34:59.140 回答
7

检查字符串的长度:

NSArray *values = @[@"A", @"B", @"", @"D"];
NSPredicate *filterPredicate = [NSPredicate predicateWithFormat:@"length > 0"];

NSArray *filteredValues = [values filteredArrayUsingPredicate:filterPredicate];

产生所需的数组("A", "B", "C")

于 2013-05-31T08:42:04.767 回答
-1
NSPredicate *predicate = [NSPredicate predicateWithFormat:@"SELF beginswith[c]%@",searchText];

[arrSearched removeAllObjects];

[arrSearched addObjectsFromArray:[self.arrContent filteredArrayUsingPredicate:predicate]];

这里 arrContent 是原始数组, arrSearched 是搜索后的输出数组。

于 2013-05-31T08:40:11.790 回答