无法从NSDictionary获取所有匹配字符串iOS
我是iOS新手,逻辑上有点弱。无法从NSDictionary获取所有匹配字符串iOS
任何一个可以帮助我在这里,
我想从NSDictionary中得到所有匹配的数据。
如:
我tempDict
是的NSDictionary包含此,
tempDict:
errorCode = 00;
errorMessage = "<null>";
pastConsultations = (
{
date = "16 December 2016";
day = Friday;
doctorName = "<null>";
localTime = "07:30 AM";
symptoms = q;
today = Yes;
},
{
date = "16 December 2016";
day = Friday;
doctorName = "<null>";
localTime = "07:30 AM";
symptoms = g;
today = Yes;
},
{
date = "13 December 2016";
day = Tuesday;
doctorName = "<null>";
localTime = "12:30 PM";
symptoms = fever;
today = No;
}
);
upcomingConsultations = (
{
date = "16 December 2016";
day = Friday;
localTime = "09:30 PM";
symptoms = "";
today = Yes;
},
{
date = "16 December 2016";
day = Friday;
localTime = "09:30 PM";
symptoms = chj;
today = Yes;
},
{
date = "18 December 2016";
day = Sunday;
localTime = "12:30 PM";
symptoms = "test an incoming ";
today = No;
}
);
}
里面一个pastConsultations
关键我想所有嵌套数据包含AM
即我的输出应该是:
{ //Array at 0th index
date = "16 December 2016";
day = Friday;
doctorName = "<null>";
localTime = "07:30 AM";
symptoms = q;
today = Yes;
},
{ //Array at 1st index
date = "16 December 2016";
day = Friday;
doctorName = "<null>";
localTime = "07:30 AM";
symptoms = g;
today = Yes;
}
}
这是我试过的代码,但它不工作,请帮助我犯错误?
NSArray *allKeys;
for (int i=0; i<[tempDict count]; i++) {
allKeys = [[[tempDict valueForKey:@"upcomingConsultations"] objectAtIndex:i] allKeys];
NSString *targetKey = nil;
// NSArray *allKeys = [[tempDict valueForKeyPath:@"pastConsultations"] allKeys];
for (int j = 0; j < [allKeys count]; ++j) {
NSString *key = [allKeys objectAtIndex:i];
NSString *obj = [[[tempDict valueForKey:@"upcomingConsultations"] objectAtIndex:i] objectForKey:key];
if ([obj rangeOfString:searchText].location != NSNotFound) { // searchedString is what you're looking for
targetKey = key;
NSLog(@"found match");
break;
}
}
}
试试这个代码:
假设你已经有了tempDict辞典加载。
NSMutableArray *morningPastArr = [[NSMutableArray alloc] init];
NSArray *pastArray = [tempDict objectForKey:@"pastConsultations"];
for (int i=0;i<[pastArray count]; i++) {
NSDictionary *eachPast = [pastArray objectAtIndex:i];
NSString *time = [eachPast objectForKey:@"localTime"];
if (![time rangeOfString:@"AM"].location == NSNotFound) {
[morningPastArr addObject:eachPast];
}
}
// finally you will have like what you need in morningPastArr.
编辑: 如果你要搜索的结果结合起来,例如,结果AM条目,周五只有你可以这样做:
NSMutableArray *morningAndFridayPastArr = [[NSMutableArray alloc] init];
NSArray *pastArray = [tempDict objectForKey:@"pastConsultations"];
for (int i=0;i<[pastArray count]; i++) {
NSDictionary *eachPast = [pastArray objectAtIndex:i];
NSString *time = [eachPast objectForKey:@"localTime"];
NSString *day = [eachPast objectForKey:@"day"];
if ((![time rangeOfString:@"AM"].location == NSNotFound)&&([day isEqualToString:@"Friday"])) {
[morningAndFridayPastArr addObject:eachPast];
}
}
为什么要使用循环?谓词比这更有效。 –
是的,我同意。你的代码更高效。但我不像你那么专业。我的代码通常更容易被新手(比如我自己)理解。我很抱歉写长码。 – GeneCode
这是工作顺利,我是新来的iOS我不知道谓词。你能说我如何使用谓词来实现这一点? –
您可以使用NSPredicate
为如下:
NSPredicate *predicate;
NSMutableArray *filteredData=[[NSMutableArray alloc]init];
predicate = [NSPredicate predicateWithFormat:@"localTime contains[c] %@",@"AM"];
//OR Use below predicate as suggested by Rishi
predicate = [NSPredicate predicateWithFormat:@"localTime ENDSWITH 'AM'"];
filteredData=[[[tempDict valueForKey:@"pastConsultations"] filteredArrayUsingPredicate:predicate]] mutableCopy];
希望这会有所帮助。
它返回空''filteredData检查 –
编辑的答案,还要检查是否'tempDict'不是'nil' @ Appledeveloper –
我仍然得到'filteredData'作为零还检查'tempDict'不是零 –
有没有任何错误或者你没有得到结果? –
没有得到结果 –