我有几个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;
}
答案 0 :(得分:1)
您发布的代码正在尝试将字符串转换为小时数,而不是分钟数。
你想:
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];
答案 1 :(得分:1)
按:
拆分(使用-[NSString componentsSeparatedByString:]
),访问每个元素(使用-[NSArray objectAtIndex:
),然后转换为整数(-[NSString intValue]
),最后乘以并添加。
答案 2 :(得分:1)
我不明白为什么你认为其他答案过于复杂,但如果你想要一个没有数组的解决方案,那么你就是:
- (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;
}