2012-02-16 85 views
0

我有NSMutableArray如下如何從NSMutableArray中取數據取決於其內的內容?

我如何只提取那些有experience_id=1或更新這些數據的數據?

有沒有其他方式沒有循環?

(
      { 
      "exp_achievements" = "get certificate for best employee"; 
      "exp_achive_id" = 1; 
      "experience_id" = 1; 
     }, 
    { 
      "exp_achievements" = "get certificate for best employee test"; 
      "exp_achive_id" = 3; 
      "experience_id" = 1; 
     }, 
      { 
      "exp_achievements" = test2; 
      "exp_achive_id" = 5; 
      "experience_id" = 3; 
     } 
    ) 
+0

告訴我,你怎麼能訪問整個陣列在一次 – Hiren 2012-02-16 07:29:30

+0

我有一次所有的數據,然後想要過濾的數據,如爲perticular exprience_id – Heena 2012-02-16 07:33:24

+0

@Roshni是這個一個json字符串? – rakeshNS 2012-02-16 07:36:00

回答

2

您可以使用NSPredicate來篩選集合:

NSMutableArray *a = [NSMutableArray arrayWithObjects: 
         [NSDictionary dictionaryWithObject:[NSNumber numberWithInt:1] forKey:@"experience_id"], 
         [NSDictionary dictionaryWithObject:[NSNumber numberWithInt:2] forKey:@"experience_id"], nil]; 
NSPredicate *f = [NSPredicate predicateWithFormat:@"experience_id == 1"]; 
[a filterUsingPredicate:f]; 

打印:

f:(
     { 
     "experience_id" = 1; 
    } 
) 

如果你的 'experience_id' 值是字符串,改變格式@"experience_id.intValue == 1"

+0

這將返回空數組 – Heena 2012-02-16 08:29:01

+0

如果在您的內部字典對象中的鍵'experience_id'是數字 - 那麼它的工作原理,測試。如果它是字符串 - 則謂詞格式應該是「experience_id LIKE [cd]'1'」。 – mit3z 2012-02-16 08:45:23

+0

它是number.as你可以在我的問題中看到在答覆打印。雖然它對'@「exp_achievements =='test2'」'工作正常,但對於exprience_id – Heena 2012-02-16 08:56:58

2

試圖用NSPredicate與關鍵experience_id = 1的值我不知道,但嘗試它可以幫助ü

+0

我如何使用nspredicate和nsmutablearray? – Heena 2012-02-16 07:37:45

+0

正如peter所說,使用nspredicate來過濾使用預測NSPredicate * pre = [NSPredicate filteredArrayUsingPredicate:temp_details]; – 2012-02-16 07:53:49

1

你應該能夠做到這一點使用filteredArrayUsingPredicate:(從NSArray),你必須創建一個NSPredicate,它可以過濾您所需的密鑰。它返回一個包含匹配項的數組。在NSMutableArray中還有filterUsingPredicate,用於刪除與謂詞不匹配的項目。