在IOS中比较字典与数组的对象值

时间:2015-03-13 05:32:06

标签: ios objective-c arrays dictionary

我有N个字典&拥有包含对象的数组。 我需要迭代并检查Object的关键EmployeeID值是否存在于Object。在数组中说obj.empId与否。

字典如下所示

{
"Message":[
{
        "EmpID": 3749,
        "Dept": 10,
        "EmployeeName": "John",
},
{
},
{
}]
}  //so many dictionaries..not one

示例:我已经有一个包含10条记录的数组,表示obj.empID从1-10开始。从服务我得到10条记录说10个字典。在该密钥中,EmpID保持值5-15。

那么,我如何迭代循环以便识别使用不同的EmpID然后现有记录检索新记录。

这是我到目前为止所做的准则..

NSArray *responseArray=responseDict[@"Message"];

for (NSDictionary *dict in responseDict[@"Message"]) {
    for (id key in responseDict) {
         if ([key isEqualToString:@"EmpID"]) {
              for (Employees *empObj in emparray)
                  {
                     BOOL isExists=YES;;

                    if (![empObj.empid isEqualToString:[responseDict objectForKey:key]]) {
                       isExists=NO;
                       break;

                       //here I need to do the logic..
                    }
                  }
             }
       }
 }

但它不会得到准确的结果或逻辑也不正确..

请为上述任务或我出错的地方建议任何更好的解决方案..

任何想法或建议都表示赞赏..

谢谢..,

2 个答案:

答案 0 :(得分:1)

如果不使用这么多循环,您可以按照以下代码检查记录是否存在。

 NSArray *responseArray=responseDict[@"Message"];
 for (Employees *empObj in emparray)
 {
       BOOL isExists=NO;           
       if ([[responseArray valueForKey:@"EmpID"]containsObject:empObj.empid]) {
             isExists=YES;
             NSLog(@"%@ EmpID Exist",empObj.empid);
                    //here I need to do the logic..
       }else{
             NSLog(@"%@ EmpID Not Exist",empObj.empid);
       }
}

答案 1 :(得分:0)

不要使用迭代,聪明地编码,使用以下代码......

NSArray *responseArray=responseDict[@"Message"];
NSArray * empIdResponseArray = [responseArray valueForKeyPath:@"@unionOfObjects.EmpID"];
NSArray * empIdLocalArray = [emparray valueForKeyPath:@"@unionOfObjects.empid"];

NSMutableSet *empIdResponseSet = [NSMutableSet setWithArray: empIdResponseArray];
NSSet *empIdLocalSet = [NSSet setWithArray: empIdLocalArray];
[empIdResponseSet intersectSet: empIdLocalSet];
NSArray *commonElementArray = [empIdResponseSet allObjects];

NSMutableArray *newElementArray = [NSMutableArray arrayWithArray:empIdResponseArray];
[newElementArray removeObjectsInArray:commonElementArray];

for (int index = 0; index < newElementArray.count; index++)
{
    NSMutableDictionary * dictEmp = [NSMutableDictionary dictionaryWithDictionary:[newElementArray objectAtIndex:index]];
    NSLog(@"EMPLOYEE = %@",dictEmp);
    // Add your Logic for new records only....
    // Enjoy :)
}