技術者のリストのサイズによっては、ループが機能します。以下のコードは、リストを繰り返し処理し、各項目を 3 つの部分 (日付、時刻、技術者) に分割し、現在からの間隔を計算し、最新の/アクティブなエージェントを特定します (間隔は最大のマイナスでなければなりません)。
何か意味のあるものを得るために、配列の日付を変更しました。
NSArray *agents = [NSArray arrayWithObjects:
@"20130920;0800;John Doe",
@"20130920;1400;Sally Smith",
@"20130920;2000;Jim Jones",
@"20130921;0800;Jane Johnson",nil];
// Setup date formatter
NSDateFormatter* onCallFormatter = [[[NSDateFormatter alloc] init] autorelease];
[onCallFormatter setDateFormat:@"yyyyMMddHHmm"];
[onCallFormatter setTimeZone:[NSTimeZone timeZoneWithName:@"GMT"]];
NSTimeInterval mostRecent = -9999999999999;
NSInteger agentIndex;
int i;
for ( i=0; i < [agents count]; i++ ) {
// Split string into elements
NSArray *elements = [[agents objectAtIndex:i] componentsSeparatedByString:@";"];
// Convert date/time into NSDate
NSDate *onCallDateTime = [onCallFormatter dateFromString:[NSString stringWithFormat:@"%@%@", elements[0], elements[1]]];
// Calculate the time interval against current date/time
NSTimeInterval onCallInterval = [onCallDateTime timeIntervalSinceNow];
// The agent on call would be the one with the largest negative interval
// onCallInterval should be < 0 (postive would be in the future)
if ( mostRecent < onCallInterval && onCallInterval < 0) {
mostRecent = onCallInterval;
agentIndex = i;
}
NSLog( @"%@ on call since %@ - %@ - %f hrs ", elements[2], elements[0], elements[1], onCallInterval/(60*60) );
}
NSLog( @"On call = %@", [agents objectAtIndex:agentIndex] );