我是iOS新手,逻辑上很弱。
任何人都可以帮助我吗,
我想从NSDictionary获取所有匹配的数据。
例如:
我的class cmp
{
public:
bool operator()(int a, int b) { return a<=b; }
};
int main()
{
set<int, cmp> s;
s.insert(2);
s.insert(2);
s.insert(4);
s.insert(5);
s.insert(6);
copy(s.begin(), s.end(), ostream_iterator<int>(cout, " "));
cout<<endl;
multiset<int> ms;
ms.insert(2);
ms.insert(2);
ms.insert(4);
ms.insert(5);
ms.insert(6);
copy(ms.begin(), ms.end(), ostream_iterator<int>(cout, " "));
cout<<endl;
return 0;
}
是NSDictionary,其中包含此内容,
tempDict:
what's the purpose of having two different containers?
在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
答案 0 :(得分:1)
试试这段代码:
假设您已经加载了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];
}
}
答案 1 :(得分:0)
您可以使用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];
希望这会有所帮助。