【问题标题】:how to fetch data from NSMutableArray depending upon content within it?如何根据其中的内容从 NSMutableArray 中获取数据?
【发布时间】:2012-02-16 07:26:36
【问题描述】:

我有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;
        }
    )

【问题讨论】:

  • 告诉我如何一次访问整个数组
  • 我一次拥有所有数据,之后需要过滤数据,例如特定的 exprience_id
  • @Roshni 这是一个 json 字符串吗?
  • 但是你必须一次访问一个数组对象,所以你必须使用循环
  • @Roshni 我无法理解数组的结构,就像 array[0]={string1,string2};数组[1]={e,e} ?

标签: iphone objective-c ios4 nsmutablearray nsmutabledictionary


【解决方案1】:

你可以使用 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"

【讨论】:

  • 如果在您的内部字典对象中,键“experience_id”是数字 - 那么它可以工作,经过测试。如果是字符串 - 那么谓词格式应该是“experience_id LIKE[cd] '1'”。
  • 它是数字。正如您在我的问题中的响应打印中看到的那样。虽然它对@"exp_achievements == 'test2'" 工作正常,但不适用于exprience_id
  • 尝试 NSLog 内部字典并找出键值的类型,我怀疑它是字符串,而不是数字。
  • inner dict : { "exp_achievements" = "get certificate for best employee"; "exp_achive_id" = 1; "experience_id" = 1; }
  • filterUsingPredicate 确实改变了数组,但filteredArrayUsingPredicate 不会(后一种方法来自NSArray,所以它不能改变对象)。
【解决方案2】:

尝试使用 NSPredicate 的值为 key experience_id=1 我不确定,但尝试它可能对你有帮助

【讨论】:

  • 如何将 nspredicate 与 nsmutablearray 一起使用?
  • 正如彼得所说,使用 nspredicate 过滤arrayusingpredicate NSPredicate *pre=[NSPredicate filteredArrayUsingPredicate:temp_details];
【解决方案3】:

您应该能够使用filteredArrayUsingPredicate:(来自NSArray)来执行此操作,您必须创建一个NSPredicate 来过滤您想要的密钥。它返回一个包含匹配项的数组。 NSMutableArray 中还有 filterUsingPredicate 会删除与谓词不匹配的项目。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2022-07-01
    • 1970-01-01
    • 2011-10-04
    • 2017-06-04
    • 1970-01-01
    相关资源
    最近更新 更多