2010-02-05 25 views
1

我有一個字典數組。我想通過查看每個字典的@「name」字段是否包含給定字符串來過濾該數組。如何執行NSDictionaries(而不是NSString)數組的情況下和變音不敏感的過濾器?

問題是我想讓我的過濾對大小寫和變音符號不敏感。

如果數組只包含字符串,我可以很容易地使用NSPredicate。但是,它並沒有,我不認爲NSPredicate可以適應這種情況。

如果我只關心不區分大小寫,我可以遍歷所有項目,並將小寫的過濾器字符串與小寫的名稱進行比較。但我不知道一個類似的變音符號技巧。

這是否有很好的解決方案?

+1

變音符號不敏感往往用術語「口音摺疊」去。這是一個數據驅動的問題,包括表格等 - 你可以在網頁上找到代碼和數據,例如http://github.com/aristus/accent-folding/blob/master/accent-fold.js – 2010-02-05 01:19:32

回答

3

什麼是這樣的:

NSArray * array = ..... 
NSString * searchString = @"foo"; 
NSArray * filteredArray = [array filteredArrayUsingPredicate:[NSPredicate predicateWithFormat:@"name contains[cd] %@", searchString]]; 
+0

啊,我沒意識到你可以這樣做。尼斯。它實際上不適用於我的具體情況,因爲我過度簡化了示例 - 數組包含字典和字符串的混合體,因此謂詞必須有語言來區分這兩種情況,我懷疑這種情況超出了其能力。這看起來像是比St3fan更優雅的解決方案,所以下次遇到這個問題時我會嘗試一下。 – emmby 2010-02-07 02:37:22

+0

@Mike一種「破解」的方法是在NSString上添加一個類,該類定義了「 - [NSString name]」,這就是'return self;'這樣你就可以在兩個字典上執行一個查找'name'的謂詞和字符串。 – 2010-02-07 03:53:23

相關問題