2016-03-15 108 views
0

我有一个NSMutableArray。它有8个对象。每个对象具有这样如何搜索复杂的NSMutableArray上的东西

{ 
    "Attendance": {}, 
    "Shift": {}, 
    "DayType": {}, 
    "DayTypes": null, 
    "TotalOvertimeString": "06:00" 
}, 

而这个“出席”的另一字典5键值对。正是这样的

"Attendance": { 
     "AttendanceCode": 5058, 
     "Date": "2016-02-01T00:00:00", 
     "EmployeeCode": 2941, 
     "ShiftCode": 1, 
     "DayTypeCode": 1, 
     "Expected": true, 
     "Midnight": false, 
     "Present": true, 
     "InTime": "2016-02-01T08:00:00", 
     "InTimeString": "08:00", 
     "OutTime": "2016-02-01T20:00:00", 
     "OutTimeString": "20:00", 
     "OutDate": "2016-02-01T00:00:00", 
     "InTime2": "1901-01-01T00:00:00", 
     "InTime2String": "00:00", 
     "InDate2": "1901-01-01T00:00:00", 
     "OutTime2": "1901-01-01T00:00:00", 
     "OutTime2String": "00:00", 
     "OutDate2": "1901-01-01T00:00:00", 
     "ApprovedOutTimeUsed": 0, 
     "ApprovedOutTime": "1901-01-01T00:00:00", 
     "Late": 0, 
     "LateString": "00:00", 
     "InLate": 0, 
     "InLateString": "00:00", 
     "MidLate": 0, 
     "MidLateString": "", 
     "OutLate": 0, 
     "OutLateString": "00:00", 
     "InOvertime": 0, 
     "InOvertimeString": "", 
     "OvertimeRate1": 6, 
     "OvertimeRate1String": "06:00", 
     "OvertimeRate1Approved": 0, 
     "OvertimeRate1ApprovedString": "00:00", 
     "OvertimeRate2": 0, 
     "OvertimeRate2String": "00:00", 
     "OvertimeRate2Approved": 0, 
     "OvertimeRate2ApprovedString": "00:00", 
     "OvertimeRate3": 0, 
     "OvertimeRate3String": "00:00", 
     "OvertimeRate3Approved": 0, 
     "OvertimeRate3ApprovedString": "00:00", 
     "OvertimeRate4": 0, 
     "OvertimeRate4String": "00:00", 
     "OvertimeRate4Approved": 0, 
     "OvertimeRate4ApprovedString": "00:00", 
     "OvertimeRate5": 0, 
     "OvertimeRate5String": "00:00", 
     "OvertimeRate5Approved": 0, 
     "OvertimeRate5ApprovedString": "00:00", 
     "OvertimeRate6": 0, 
     "OvertimeRate6String": "00:00", 
     "OvertimeRate6Approved": 0, 
     "OvertimeRate6ApprovedString": "00:00", 
     "OvertimeApprovalDone": false, 
     "Lieu": false, 
     "LieuFirstTaken": false, 
     "LieuSecondTaken": false, 
     "LieuPayment": 0, 
     "DayOff": false, 
     "DayOffTaken": false, 
     "LeaveTypeCode": 0, 
     "LeaveAmount": 0, 
     "LeaveTypeCode2": 0, 
     "LeaveAmount2": 0, 
     "ShortLeaveAmount": 0, 
     "Premium": 0, 
     "PremiumString": "00:00", 
     "PremiumApproved": 0, 
     "PremiumApprovedString": "00:00", 
     "Missing": 0, 
     "MissingString": "00:00", 
     "ClockNumber": 0, 
     "SectionCode": 0, 
     "WorkHours": 0, 
     "PeriodWorked": 0, 
     "WorkHrs": 0, 
     "Remarks": "uuuuuuuuuuuuuuus", 
     "Deleted": false, 
     "Status": true, 
     "CreatedBy": 0, 
     "CreatedDate": "1901-01-01T00:00:00", 
     "UpdatedBy": 9, 
     "UpdatedDate": "2016-01-13T22:48:03.737", 
     "DeletedBy": 0, 
     "DeletedDate": "1901-01-01T00:00:00" 
    }, 

我想要做的就是找到这个确切的日期值是否可用在这个阵列"Date": "2016-02-01T00:00:00"如何搜索这个日期是否可用在这阵?请帮帮我。

+1

由于您知道数组元素的结构,因此可以使用多种方法遍历数组中的所有元素,例如'enumerateObjectsUsingBlock'。如果您的目标是找到一个方便的方法来判断整个数组中是否有日期,我建议您将该数组转换为JSON字符串,并且可以将它看作一个长字符串,并且很容易找到结果。 – childrenOurFuture

回答

1

你可以对于这种嵌套结构,使用valueForKeyPath而不是valueForKey。这第一个对象是一个字典。

NSDictionary *dict = @{ 
    @"Attendance": @{...,@"Date": @"2016-02-01T00:00:00",....}, 
    @"Shift": @{}, 
    @"DayType": @{}, 
    @"TotalOvertimeString": @"06:00" 
}; 

使用下面的一行代码:

[[dict valueForKeyPath:@"Attendance.Date"] isEqualToString:@"your date"] 
+0

,因此我需要使用for循环? – user1960169

+0

如果您已经知道第一个对象中的密钥名称,即考勤,则不需要任何循环。如果您不知道密钥名称,则只需要为包含8个字典对象的外部字典使用循环。 – PGDev

+0

但是如何为每8个物体旅行?怎么我有{ “考勤”:{}, “转变”:{}, “DayType”:{}, “DayTypes”:空, “TotalOvertimeString”: “06:00” },这种类型8个对象。 – user1960169

0

尝试下面的代码 [arrray valueForKey @ “考勤”] valueForKey @ “日期”] isEqualToString行:@ “2016-02-01T00:00:00”]

希望这会帮助你。

0

您可以从中获取数据并通过以下方式进行比较。

NSMutableArray *array = @[];//Array of dictionaries 
NSDate *dateToCompare = [NSDate date];//Any date you want to compare 
for (NSDictionary *dictionary in array) { 
    NSDate *dateAttendance = dictionary[@"Attendance"][@"Date"]; 
    //Compare dates 
    if ([dateToCompare isEqualToDate:dateAttendance]) { 
     NSLog(@"Dates equal"); 
    } 
} 

如果这两个日期都在的NSString可以使用

[dateToCompareString isEqualToString:dateAttendanceString] 
+0

那么我仍然需要使用foor循环?因为我的阵列中有8个对象 – user1960169

+0

在这种情况下,您可以使用循环 –

0

制作@Muhammad纳比尔·阿里夫答案。 ü只需要遍历你的所有对象NSMutableArray获取数组中的所有日期。最后你可以使用NSMutableArray的containsObject方法检查你的日期。

NSDate *dateToCompare = [NSDate date];//Any date you want to compare 
NSMutableArray *allDates =[NSMutableArray alloc]init]; 
for (int i = 0; i<array.count; i++) 
{ 
    NSMutableDictionary *dictionary = @{};//YOur data 
    NSDate *dateAttendance = dictionary[@"Attendance"][@"Date"];//Compare dates 
    [allDates addObject:dateAttendance]; 
} 

if([allDates containsObject:dateToCompare]) 
{ 
// Do whatever if it exists 
}else 
    { 
`// place your code here if its doesnt exist.` 
    } 

containsObject方法在数组中存在anObject时返回YES,否则返回NO。

希望它有帮助。快乐编码..!