我有几个包含持续时间的NSStrings
,它们看起来像这样: @"03:40", @"08:40"
- 时间是操作的持续时间。我想为每个字符串提供一个带有分钟int
,比如"01:20"是"80"(分钟),以便以后将它们相互比较。
你如何在Objective-C中管理这个简单的事情?提前致谢
编辑:
试过这个,无济于事。我想要一种完全不同的方法,简单而轻松的方法。
- (NSMutableArray *)sortResultsByTime
{
NSMutableArray *sortedTrips = [NSMutableArray arrayWithArray:[_tweets sortedArrayUsingComparator: ^(id trip1, id trip2) {
double time1 = [self durationFromString:[(Tweet *) trip1 flightDuration]];
double time2 = [self durationFromString:[(Tweet *) trip1 flightDuration]];
NSLog(@"What's time1? It's %f", time1);
NSLog(@"What's time2? It's %f", time2);
if (time1 < time2) {
return (NSComparisonResult)NSOrderedDescending;
}
if (time1 > time2) {
return (NSComparisonResult)NSOrderedAscending;
}
return (NSComparisonResult)NSOrderedSame;
}]];
return sortedTrips;
}
- (double)durationFromString:(NSString *)durationString
{
NSArray *durationArray = [durationString componentsSeparatedByString:@":"];
return [durationArray[0] doubleValue] + [durationArray[1] doubleValue] / 60.0;
}
您发布的代码正在尝试将字符串转换为小时数,而不是分钟数。
你想要:
return [durationArray[0] doubleValue] * 60 + [durationArray[1] doubleValue];
编辑:原始代码失败,因为以下行:
double time2 = [self durationFromString:[(Tweet *) trip1 flightDuration]];
需要:
double time2 = [self durationFromString:[(Tweet *) trip2 flightDuration]];
更新:既然OP想要一种不同的方法,为什么不简单地这样做:
NSString *time1 = [(Tweet *) trip1 flightDuration];
NSString *time2 = [(Tweet *) trip2 flightDuration];
return [time1 compare:time2];
按:
拆分(使用 -[NSString componentsSeparatedByString:]
),访问每个元素(使用 -[NSArray objectAtIndex:
),然后转换为整数 ( -[NSString intValue]
),最后乘法和加法。
我不明白为什么你认为其他答案过于复杂,但如果你想要一个没有数组的解决方案,这里是:
- (double)durationFromString:(NSString *)s
{
int hr = 0, min = 0;
NSScanner *scn = [NSScanner scannerWithString:s];
[scn scanInt:&hr];
[scn scanString:@":" intoString:NULL];
[scn scanInt:&min];
return hr * 60 + min;
}