2012-03-02 9 views
0

NSMutableArrayを元の配列として使用していますが、その例で示すように、キー値ペアでフィルタリングしたいが、特定のキー値ペアのみでフィルタリングしたい。例として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

複数のkeyvalueペアが必要です。ここでnspredicateをどのように便利に使用できますか? – Heena

+1

nspredicatesはデータ構造を変更できません。したがって、異なる(異なるキー)配列要素を返す場合は、おそらく列挙を使用する必要があります。 –

+0

'NSMutableArray * myNewArray = [NSMutableArray array]; (NSDictionary * obj、NSUInteger idx、BOOL * stop){ NSDictionary * mynewdice = [NSDictionary dictionaryWithObjectsAndKeys:[obj valueForKey:@ "name"]、@ "name" ,, [obj valueForKey:@ " @ "startdate"、[obj valueForKey:@ "end_date"]、@ "enddate"]; [myNewArray addObject:mynewdice]; (struct NSDictionary *、NSUIInteger、BOOL *) – Heena

0

が変更可能な辞書であり、あなたの場所に元の配列を変更したり、新しい配列を作成するために探している

最も簡単な解決策セットアップが許可されていれば、それは次のようになります??

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

forループソリューションはほぼ同じに見えますが、

valueForKey:を使用して、明示的なループを残したくない各フィールドの別々の配列を抽出することができますが、これらの3つの配列をきれいに1つの配列に統合する方法を考えることはできません3つのエントリの辞書。

+0

辞書が可変であるかどうかを心配する必要はありません。元の配列を変更できませんでした – Heena

関連する問題