我如何过滤NSMutableArray作为示例?

时间:2012-03-02 04:23:13

标签: iphone objective-c filter nsmutablearray

我有一个NSMutableArray作为我的原始数组,我想用它的keyvalue对过滤掉它,但只有一些keyvalue对,如例子中所示。

我不想使用循环逻辑。有没有其他方法来获得所需的输出? 我不想修改我的原始数组。

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循环的情况下实现此目的?

2 个答案:

答案 0 :(得分: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。

答案 1 :(得分:0)

词典是否可变?您是否希望修改原始阵列或创建新阵列?

如果您的设置允许,最简单的解决方案是:

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

虽然for循环解决方案看起来几乎相同。

从KVC的角度来看,您可以使用valueForKey:来提取您想要保留的每个字段的单独数组,而不使用显式循环,但我想不出能够将这三个数组干净地整合到一起的快速方法一系列三条词典。