2015-08-15 50 views
1

我有一個NSArray,其中包含MyCustomObject的實例;每個都有一個NSString,稱爲firstName獲取NSArray中的所有對象,其字符串屬性以特定字母開頭

該陣列由屬性排序,從A到Z

我只希望這些對象那裏firstName開始以字母A

例如,假設我的數組有100個對象。

1. Apple 
2. Ace 
3. Article 
4. Ball 
5. Cat 
6. Camel 
.... 

100. Zebra 

在這裏,我只想要「Apple」,「Ace」和「Article」。

+0

你擔心性能或通過循環整個數組和做字符串查找一個正確的路徑? –

+1

根據您以前的(現已刪除的)問題,您不想迭代列表,只查找以A開頭的項目,然後再用B等等,僅迭代列表一次。根據其起始字母將每個項目放入適當的「桶」中。重複列表26次將會很糟糕。 – rmaddy

+0

順便說一句 - 你應該更新你的問題來解釋你真的想要做什麼。根據當前問題得出的答案並不適合你真正想要做的事情,即將原始列表拆分爲字母表中每個字母的單獨數組。 – rmaddy

回答

0

你可以這樣做:

NSIndexSet* indexes = [array indexesOfObjectsPassingTest:^BOOL(CustomObject* obj, NSUInteger idx, BOOL *stop){ 
    return [obj.firstName rangeOfString:@"a" options:NSCaseInsensitiveSearch | NSDiacriticInsensitiveSearch | NSAnchoredSearch].location != NSNotFound; 
}]; 
NSArray* matchingObjects = [array objectsAtIndexes:indexes]; 
+0

這是一個偉大而有效的答案。然而,使用for循環並將A B C D E ... Z放在rangeOfString中,以便單獨獲取所有數組是很好的方法嗎? @Ken Thomases –

+1

不,這不是一個非常有效的方法。當您檢查其firstName的第一個字母時,您只需循環一次數組,並將對象添加到適當的數組中。 –

+0

不,我想每個字母字符集必須在一個單數組中,並且該數組應該放入NSDictionary中。例如鍵'A'將具有所有名字以A開頭的對象,'B'鍵將具有所有名字以B字母開頭的對象。 –

1

您可以在NSPredicate通過謂詞

NSPredicate *predicate = [NSPredicate predicateWithFormat:@"SELF.firstName beginswith[c] %@",<value>]; 
NSArray *result = [array filteredArrayUsingPredicate:predicate]; 

濾波器陣列欲瞭解更多詳情,請登錄本link

+0

什麼是? –

+0

每個你想要的@「A」或@「B」.... @「Z」 –

+1

這是一個很好的答案,通過謂詞搜索總是一個好的和可行的選項 –

相關問題