无法从NSDictionary iOS获取所有匹配字符串

时间:2016-12-16 08:31:16

标签: ios objective-c iphone nsmutablearray nsdictionary

我是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

2 个答案:

答案 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];

希望这会有所帮助。