2012-11-28 41 views
0

我有幾個NSStrings包含持續時間,他們看起來像這樣:@"03:40", @"08:40" - 時間是一個行動的持續時間。 我希望有一個int分鐘的每個字符串,說「01:20」是「80」(分鐘),以便稍後將它們相互比較。轉換HH:MM NSString到NSInteger與分鐘

你如何在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; 
} 
+1

[?你嘗試過什麼(http://whathaveyoutried.com ) – 2012-11-28 21:15:36

+0

@ H2CO3回答了你的問題。此外,答案與我的問題無關,我需要一個不同的方法 –

+0

爲什麼你需要轉換爲整數以便比較?如果你的字符串有前導零,你可以使用它們。 – djromero

回答

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]; 
+0

非常感謝,但我想要一種不同的方法。 doubleValue的東西對我來說並不適用。 –

+0

對不起,我不知道你的意思。什麼不工作? – rmaddy

+0

轉換爲double和所有這些東西。我想在幾小時內收到原始數據。沒有新陣列和過於複雜的技術。 –

1

:拆分(使用-[NSString componentsSeparatedByString:]),訪問每個元素(-[NSArray objectAtIndex:),然後將其轉換爲整數(-[NSString intValue]),最後乘法和加法。

+0

這不是什麼已經完成(除了使用double而不是整數)嗎? – rmaddy

+2

當我回答時,該代碼不在那裏。 – djromero

+0

當然可以。我在你和我之前回答了他的代碼。 – rmaddy

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; 
} 
相關問題