2012-03-02 30 views
0

我有一個NSMutableArray作爲我的原始數組,我想過濾出它的keyvalue對,但只有一些keyvalue對如示例所示。如何過濾NSMutableArray作爲示例?

我不想使用循環邏輯。有沒有其他的方式來獲得所需的輸出? 我不想修改我的原始數組。

original array{ 
       "name" = "name"; 
       "end_date" = "test end date"; 
       "id" = 104; 
       "start_date" = "test start date"; 
       "user_id" = 5; 
       }, 
       { 
       "name" = "name1"; 
       "end_date" = "test1 end date"; 
       "id" = 105; 
       "start_date" = "test1 start date"; 
       "user_id" = 5; 
      } 


want filtered array as 
{ 
     "name" = "name"; 
     "end_date" = "test end date"; 
     "start_date" = "test start date"; 

} 
} 
     "name" = "name"; 
     "end_date" = "test end date"; 
     "start_date" = "test start date"; 
} 

如何在不使用for循環的情況下實現此目的?

+3

爲什麼不使用循環? –

+0

數組包含可變字典或不可變字典嗎? –

+0

我的排列太長,這就是爲什麼不去循環 – Heena

回答

2

您可以使用像這樣使用enumerateObjectsUsingBlock(我沒有從NSDictionary中列舉的所有鍵:

NSMutablArray *myNewArray = [NSMutableArray array]; 
    [myArray enumerateObjectsUsingBlock:^(NSDictionary *obj, NSUInteger idx, BOOL *stop) { 
      NSDictionary *myNewDict = [NSDictionary dictionaryWithObjectsAndKeys:[obj valueForKey:@"name"],@"name"]]; 
      [myNewArray addObject:myNewDict]; 
    }]; 

如果你想只是一個子元素,你可以使用一個NSPredicate

+0

我想要多個鍵值對。所以在這裏如何方便地使用nspredicate? – Heena

+1

nspredicates不能修改數據結構,它們只能查詢。所以如果你想返回不同的數組元素(不同的鍵),你可能應該使用枚舉。 –

+0

'NSMutableArray * myNewArray = [NSMutableArray array];我們可以使用NSDictionary * mynewdice = [NSDictionary dictionaryWithObjectsAndKeys:[obj valueForKey:@「name」],@「name」,[obj valueForKey:@「 start_date「],@」startdate「,[obj valueForKey:@」end_date「],@」enddate「]; [myNewArray addObject:mynewdice]; (^)(struct NSDictionary *,NSUIInteger,BOOL *)expected void(^)(struct obj_object *,NSUIInteger,BOOL *)' – Heena

0

是字典可變的,你要買修改原始數組中的地方或創建一個新的陣列

最簡單的解決辦法,如果你設置允許的情況將是:??

[array enumerateObjectsUsingBlock: 
     ^(id obj, NSUinteger idx, BOOL *stop) 
     { 
       [obj removeObjectsForKeys: 
        [NSArray arrayWithObjects: 
         @"id", @"userid", nil] 
       ]; 
     } 
]; 

儘管for循環解決方案看起來幾乎相同。

從KVC的角度來看,您可以使用valueForKey:來提取每個字段的單獨數組,希望保留而沒有顯式循環,但我想不到一種快速方法將這三個數組乾淨地整合到一個數組中三入詞典。

+0

我只是過濾出來,所以不用擔心字典是否可變。我無法修改我的原始數組 – Heena