所以我有一個基於時間屬性的對象數組。不幸的是,時間屬性是以非常格式化的字符串形式給出的。即下午6點,上午10點,上午7點按非時間格式排序時間對象數組
1
A
回答
1
我建議將這些對象轉換爲NSDate
對象並在此基礎上進行排序。不過,您需要爲每個可能的排列組合使用NSDateFormatters
。例如:
let timeStrings = ["6pm", "10:30 am", "7 am", "1:42:00 pm"]
let hourOnlyFormatter = NSDateFormatter()
hourOnlyFormatter.dateFormat = "ha"
let hourMinuteFormatter = NSDateFormatter()
hourMinuteFormatter.dateFormat = "h:mma"
let hmsFormatter = NSDateFormatter()
hmsFormatter.dateFormat = "h:mm:ssa"
let times = timeStrings.map { ($0, hourOnlyFormatter.dateFromString($0) ?? hourMinuteFormatter.dateFromString($0) ?? hmsFormatter.dateFromString($0)!) }
.sort { $0.1.compare($1.1) == .OrderedAscending }
.map { $0.0 }
這將產生
[ 「上午7點」, 「10:30」, 「下午1時42分00秒」, 「18:00」]
或者,如果你想要一個更一致的輸出,設計爲輸出格式:
let outputFormatter = NSDateFormatter()
outputFormatter.timeStyle = .ShortStyle
然後你就可以使用,建立結果時:
let times = timeStrings.map { ($0, hourOnlyFormatter.dateFromString($0) ?? hourMinuteFormatter.dateFromString($0) ?? hmsFormatter.dateFromString($0)!) }
.sort { $0.1.compare($1.1) == .OrderedAscending }
.map { outputFormatter.stringFromDate($0.1) }
其中產量:
[ 「7:00 AM」, 「10:30」, 「下午1:42」 「6:00 PM」]
+1
這是一個高質量的答案。 – WMios
0
我寫了一個小功能,可以同時作爲格式類型String
的日期進行排序:
"#xm"
"# xm"
"##:##xm"
"##:## xm"
其中#
是一個數字,是am
或pm
。
檢查出來:
func formattedTime(currentTime:String) -> Int{
var time = 0
let length = currentTime.characters.count
let ampm = String(currentTime.characters.suffix(2))
var nsCurrentTime = currentTime as NSString
nsCurrentTime = nsCurrentTime.substringWithRange(NSRange(location: 0, length: length-2)).stringByTrimmingCharactersInSet(NSCharacterSet.whitespaceCharacterSet())
if nsCurrentTime.containsString(":"){
let arr = nsCurrentTime.componentsSeparatedByString(":")
time += Int(arr[0])!*60 + Int(arr[1])!
} else {
time += nsCurrentTime.integerValue * 60
}
if ampm == "pm" {
time += 12*60
}
return time
}
let unsorted = ["7:30 pm", "7pm", "4am", "2:15pm", "3:16am"]
let sorted = unsorted.sort({a, b in formattedTime(a) < formattedTime(b)})
print(sorted)
它打印:
"["3:16am", "4am", "2:15pm", "7pm", "7:30 pm"]\n"
相關問題
- 1. 按時間順序排列的時間軸和格式日期
- 2. 按時間間隔對時間序列數據進行分組
- 3. 如何按時間順序排列時間數組?
- 4. 按照反向時間順序排列對象的Javascript排序
- 5. 根據日期時間對對象的數組列表排序
- 6. 喬達日期時間數組排序數組按日期時間
- 7. 如何在Python中按日期時間對對象數組進行排序?
- 8. 按時間排序的MySQL組
- 9. 按時間排序的sql組
- 10. C#列表按時間倒序按時間順序排序
- 11. 由日期時間排序numpy的對象數組
- 12. 按時間間隔排列的Teradata組
- 13. 讓Excel按時間排序?
- 14. Array未按時間排序
- 15. MySQL:按時間排序(MM:SS)?
- 16. 按時間排序的SQL
- 17. 按時間排序矢量
- 18. 按SQL時間戳排序
- 19. 按時間排序JSON
- 20. PHP時間的實際時間格式不排序
- 21. 按時間排序正確排序
- 22. 存儲可按id排序的對象並按時間戳排序
- 23. MYSQL按日期時間順序排序而不是按時間順序排列
- 24. 業務對象格式日期時間
- 25. 格式化日期時間對象
- 26. Echo在時間戳格式的陣列/日期時間對象
- 27. 我需要按價格排序,然後按相同價格按時間排序多維相關數組
- 28. Firebase數據按時間戳排序
- 29. 按子對象排序對象數組
- 30. Mysql按時間排序(小時)
@ sudomakeinstall2,這只是甚至還沒有接近 – WMios
我建議你將其分爲兩個部分。首先解析時間,然後排序。 – Alexander