2013-05-31 135 views
2

我有一個包含字符串的數組。其中一些字符串可能爲空(@「」)。如何使謂詞看起來像過濾數組並返回一個只包含非空字符串的新數組:使用NSPredicate過濾NSArray

數組A:{「A」,「B」,「」,「D」} - > FILTER - >陣列B:{ 「A」, 「B」, 「d」}

,它也應該返回此:

數組A:{ 「」, 「」, 「」, 「」} - > FILTER - > Array B:{}

回答

10

如果您正在篩選NSString s的數組,則使用謂詞SELF != ''。這匹配每個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 

編輯:里斯Kluivers貼有謂詞格式length > 0溶液。這可能是更好的解決方案,只是刪除空字符串,因爲它可能會更快。

+0

的作品就像一個魅力:) – DanielR

-1
NSPredicate *predicate = [NSPredicate predicateWithFormat:@"SELF beginswith[c]%@",searchText]; 

[arrSearched removeAllObjects]; 

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

這裏arrContent是原始數組,arrSearched是搜索後的輸出數組。

7

檢查字符串的長度:

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

NSArray *filteredValues = [values filteredArrayUsingPredicate:filterPredicate]; 

結果所要求的陣列("A", "B", "C")

+0

+1很好的解決方案,不知道這個1英寸可能會比我的解決方案比較空白字符串更快。我編輯了我的答案,提到你的答案;-) –