如何根据ios中的特定键从数组中获取字典

时间:2014-04-16 03:51:13

标签: ios objective-c nsdictionary nspredicate

您好,在我的应用程序中,我有一个包含一组词典的数组。每个字典都有三个键值对。三个中有两个是开始日期和结束日期。现在我想传递一个日期并让它从数组中获取字典,其中日期将在开始日期和结束日期之间。如果日期不在开始日期和结束日期范围内,则必须检入另一个字典并且必须获取该字典。任何人都可以帮我做这件事。

日期(DD / MM / YYYY): 13/04/2014

开始日期: 03/04/2014

结束日期: 2014年4月31日

字典:

NSDictionary *dic=[[NSDictionary alloc]initWithObjectsAndKeys:@"0",@"Scode",@"01-04-2014",@"StartDate",@"15-04-2014",@"EndDate",nil];
NSDictionary *dic1=[[NSDictionary alloc]initWithObjectsAndKeys:@"1",@"Scode",@"16-04-2014",@"StartDate",@"25-04-2014",@"EndDate",nil];    
NSDictionary *dic3=[[NSDictionary alloc]initWithObjectsAndKeys:@"2",@"Scode",@"26-04-2014",@"StartDate",@"30-04-2014",@"EndDate"nil];

结果:

 NSPredicate *predicateName;
 predicateName=[NSPredicate predicateWithFormat: @"StartDate <=%@ && EndDate >=%@",date,date];
 NSArray *arrResult=[tempArray filteredArrayUsingPredicate:predicateName];
 NSMutableArray *arrSearchResults = [[NSMutableArray alloc]initWithArray:arrResult];

如果日期是1-4-2014,则arrSearchResults为:

({
    EndDate = "15-04-2014";
    StartDate = "01-04-2014";
    SCode = 0;
})

如果日期是2-04-2014,arrSearchResults是:

({
    EndDate = "25-04-2014";
    StartDate = "16-04-2014";
    SCode = 1;
})

2 个答案:

答案 0 :(得分:1)

请检查答案:

    NSMutableArray *arr=[[NSMutableArray alloc]init];

    NSDictionary *dic=[[NSDictionary alloc]initWithObjectsAndKeys:@"0",@"Scode",@"01-04-2014",@"StartDate",@"15-04-2014",@"EndDate",nil];

    NSDictionary *dic1=[[NSDictionary alloc]initWithObjectsAndKeys:@"1",@"Scode",@"16-04-2014",@"StartDate",@"25-04-2014",@"EndDate",nil];

    NSDictionary *dic2=[[NSDictionary alloc]initWithObjectsAndKeys:@"2",@"Scode",@"26-04-2014",@"StartDate",@"30-04-2014",@"EndDate",nil];

    [arr addObject:dic];
    [arr addObject:dic1];
    [arr addObject:dic2];

     NSPredicate *predicateName;
     predicateName=[NSPredicate predicateWithFormat: @"StartDate <=%@ && EndDate >=%@",@"02-04-2014",@"02-04-2014"];
     NSArray *arrResult=[arr filteredArrayUsingPredicate:predicateName];
     NSMutableArray *arrSearchResults = [[NSMutableArray alloc]initWithArray:arrResult];

arrSearchResults将是结果。

将02-04-2014日期替换为您要应用过滤器的日期。

答案 1 :(得分:-2)

你需要做什么:

1)从数组中提取startDate和endDate。

2)使用日期格式化程序格式化两个日期

3)现在,将两个日期与当前日期进行比较,如下所示,

根据NSDate比较的Apple文档:

 if (([currentDate compare:startDate] == NSOrderedDescending) && ([currentDate compare:endDate] == NSOrderedAscending))
{
//Date lies in between two dates
}

希望它有所帮助。