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

Posted

技术标签:

【中文标题】如何根据ios中的特定键从数组中获取字典【英文标题】:How to fetch a dictionary from an array based on a particular key in ios 【发布时间】:2014-04-16 03:51:12 【问题描述】:

嗨,在我的应用程序中,我有一个包含一组字典的数组。每个字典都有三个键值对。三分之二是开始日期和结束日期。现在我想传递一个日期并让它从一个数组中获取一个字典,其中日期将在开始日期和结束日期之间。如果日期不在开始日期和结束日期的范围内,则必须检查另一个字典并获取该字典。谁能帮我做这件事。

日期(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;
)

【问题讨论】:

您是否尝试过任何方法来解决您的问题?如果是,则分享您尝试过的流程和代码,否则您先尝试。 :) 嗨,谢谢拉沙德 :) :) 请先把字典贴在这里。 嗨 tihomFreak 我编辑了我的问题,请您检查一次。 @user3341324 你得到答案了吗? 【参考方案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 日期替换为您要应用过滤器的日期。

【讨论】:

谓词将考虑 startDate 和 endDate 作为字符串进行过滤。 @Himanshu A Jadav:那么,如果您正确格式化了字符串,它将为您提供正确的结果。我尝试了这个,然后发布在 SO 上。你在做-1之前检查过它吗?请在做-1之前检查它 @Himanshu A Jadav:如果你愿意,你可以执行上面的代码sn-p,然后也检查其他日期:) 嗨 svrushal 非常感谢您的回复。您的回答在一定程度上帮助了我来第二个 2 会来,依此类推。当我得到一个日期时,我必须检查该日期是否在第一个 dic 范围或第二个 dic 日期范围或第三个 dic 日期范围内。基于此,我必须从该 dic 获取 Scode。你能帮帮我吗? @user3341324 那么这很容易 na...我认为对于循环,您已经使用了 for 循环...然后在 for 循环中触发 NSPredicate。要获取 Scode,arrSearchResults 将是包含字典的结果。然后从 arrSearchResults 中检索字典,然后从 Scode 键值中检索。【参考方案2】:

你需要在这里做什么:

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

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

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

根据 Apple 的 NSDate 文档比较:

 if (([currentDate compare:startDate] == NSOrderedDescending) && ([currentDate compare:endDate] == NSOrderedAscending))

//Date lies in between two dates

希望对你有帮助。

【讨论】:

以上是关于如何根据ios中的特定键从数组中获取字典的主要内容,如果未能解决你的问题,请参考以下文章

当我只想获取字典中的特定值时,如何解码字典值的 JSON 数组?

如何从具有多个数组的字典中获取特定键并存储到放置在表格视图单元格中的字符串中

根据codeigniter中的外键从两个表中获取json编码数据

在 laravel 5.4 刀片中通过键从多维数组中获取值

如何使用 CodeIgniter 3 中的外键从表中获取列数据

根据 JSTL 的键从 hashmap 中获取值