2013-11-01 50 views
0

我是新來的ios。NSMutableDictionary的NSMutableArray如何使用正則表達式過濾

我有一個NSMutableArray的NSDictionary如何過濾陣列

//sections is a NSMutableArray of NSMutableDictionary elements 

[sections addObject:getName]; 
NSSortDescriptor *sortDescriptorFirst = [NSSortDescriptor sortDescriptorWithKey:@"first" ascending:YES]; 
     NSSortDescriptor *sortDescriptorLast = [NSSortDescriptor sortDescriptorWithKey:@"last" ascending:YES]; 

     NSSortDescriptor *descriptor=[NSArray arrayWithObjects:sortDescriptorFirst,sortDescriptorLast,nil]; 

     NSArray *sortedArray =[sections sortedArrayUsingDescriptors:descriptor]; 

如何繼續這裏的代碼,以便將數組與匹配正則表達式值?

+0

是否有一個原因,你必須使用正則表達式?你可以使用NSPredicate嗎? –

回答

0

如果我正確理解你的問題,你需要一個包含字典值的所有 的字符串。這將是:

NSString *str = [[dict allValues] componentsJoinedByString:@" "]; 

,然後你可以檢查是否str像以前那樣給定的正則表達式模式匹配。

+0

謝謝。這正是我需要的。你能解釋一下這條線是做什麼的?什麼是allValues以及爲什麼這個componentsJoinedByString? –

+0

@justME:'allValues'返回所有字典值的*數組*,並且'componentsJoinedByString'返回一個*字符串*,其中包含由給定分隔符連接的所有數組元素。有關更多信息,請參閱NSDictionary和NSArray文檔。 –

+0

你爲什麼用@「」加入元素?這一行與創建NSMutableString並連接所有NSString * Name = [dict valueForKey:@「first」]; (@「持續」)? –

0

從您的文章的外觀看起來你可以只使用一個NSPredicate,而不是一個正則表達式

好的嘗試沿着此線的東西:

NSPredicate* p = [NSPredicate predicateWithFormat:@"key = %@", value]; 
NSArray* matches = [arrayOfDicts filteredArrayUsingPredicate:p]; 

NSPredicate可以使用各種運營商如LIKE,!=<

如果您需要根據列表中的值進行過濾,您可以構建一個謂詞沿@"key IN %@", arrayOfPossibleValues

將該示例代碼替換爲key,該示例代碼中包含要嘗試過濾的字典中的鍵。如果需要,您可以使用多個鍵進行篩選。

+0

我需要使用正則表達式,因爲我的輸入值可以是:[a-c0] [m-p5]。這意味着我需要篩選所有鍵中包含a,b,c,m,n,p或0或5的所有鍵的所有鍵 –

+0

我非常抱歉,我沒有指定此項。我確實添加了這個[enumerateObjectsUsingBlock部分:^(NSDictionary * dict,NSUInteger idx,BOOL * stop){NSString * str = [dict valueForKey:@「first」]; NSTextCheckingResult * match = [正則表達式firstMatchInString:str選項:0範圍:NSMakeRange(0,[str length])]; if(match){...}你能告訴我如何在NSString * str中設置key = @「last」的對象嗎? –

+0

我仍然不明白爲什麼你不能使用NSPredicate。只需使用'@「鍵IN%@」,arrayOfValues' –