【问题标题】:Sort Array of String that contains time based on time in Swift在 Swift 中根据时间对包含时间的字符串数组进行排序
【发布时间】:2022-12-05 22:15:05
【问题描述】:

假设我有一串时间。 我想以一种根据时间排序的方式进行排序。

例如我有一个数组

["02:51 AM", "11:10 AM", "12:35 AM"]

我希望数组是这样的。

["12:35 AM", "02:51 AM", "11:10 AM"]

我该如何排序,因为凌晨 2 点在凌晨 12 点之后,上午 11 点在凌晨 2 点之后

【问题讨论】:

  • “12:35 AM”没有意义。它应该是“00:35 AM”。仅“12:35 'PM'”
  • @JJHA 它在世界某些地方确实有意义
  • 在世界的哪个地方?只是一个根据你自己的条件排序的数组?严重地 ?那么你只是用 last.append(first) last.append(second) 对它进行排序?让 last = array[2],让 first = array[0],让 second = array[1]?
  • @JJHA 世界上有些地方在谈论时间时确实使用 12 AM。这也不是在代码中使用简单的 if 语句无法处理的事情! :D
  • @ZeeshanAhmadII 您的代码似乎与排序无关,并且在呈现时毫无意义。

标签: swift string dateformatter


【解决方案1】:

代码

times = ["02:51 AM", "11:10 AM", "12:35 AM"]

temp = [] 

for time in times: 
    num, zone = time.split(' ') 
    hour, minute = num.split(':')  

    result = int(hour) + float(minute)/100 
    if zone == 'PM' and int(hour) != 12: 
        result += 12
    
    if zone == 'AM' and int(hour) == 12: 
        result -= 12 

    temp.append(result) 

times = [x for _, x in sorted(zip(temp, times))]
print(times) 

解释

  1. 将每次表示为浮点数,小时表示整数,分钟表示小数。此外,如果时间在“PM”中,则将值 12 添加到数字表示中。

  2. 对于“12 AM”时间的特定情况,因为它没有表示为“00:00 AM”,所以我包含了一个相同的 if 语句。

  3. 根据包含数字表示的数组对初始数组进行排序。

    期望的输出

    ['12:35 AM', '02:51 AM', '11:10 AM'] 
    

    编辑:我忽略了 Swift 中需要的答案。希望可以转录代码本身背后的逻辑。

【讨论】:

  • 您需要将此答案翻译成 Swift,因为这是标记问题的编程语言。
  • 哦,我的坏。我完全忽略了那部分。我不熟悉斯威夫特。希望 OP 或其他用户可以翻译相同的内容;(
猜你喜欢
  • 2020-10-26
  • 1970-01-01
  • 1970-01-01
  • 2016-09-01
  • 2021-03-12
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2021-12-31
相关资源
最近更新 更多