gpt4 book ai didi

arrays - 根据每个元素的一部分内容对PowerShell数组进行排序

转载 作者:行者123 更新时间:2023-12-03 01:15:30 24 4
gpt4 key购买 nike

我正在使用Powershell脚本,其中有一个包含以下数据的数组。下面的每一行都是数组中的一个元素。

每个元素都有两部分,中间用“/”分隔一个数字(可以是1到12位数字)和一个日期时间。

我需要根据每个元素中给定的日期和时间对数组进行排序。

201410212339/21-Oct-2014 23:50 -
2251/27-Sep-2014 23:02 -
0436/22-Oct-2014 04:47 -
091342/09-Oct-2014 13:53 -
2220743/22-Oct-2014 07:53 -
20140/22-Sep-2014 07:41 -
2190446/19-Oct-2014 04:56 -
2014258/21-Aug-2014 23:21 -
22110/22-Oct-2014 14:21 -
1410221721/22-Jun-2014 17:33 -
130/23-Jul-2014 11:42 -
10231426/23-Feb-2014 14:38 -
231731/23-Jan-2014 17:43 -
0232039/23-Mar-2014 20:51 -

谁能帮我这个?我想对数组进行排序以访问最新的或倒数第二个条目,并使用与其关联的数字。我可以尝试将每个元素分为数字和日期时间并对其进行排序,但是我正在寻找一种更简单的方法。

提前致谢。

最佳答案

如果要按日期和时间排序,这是一种方法。

这是您的数据作为数组

$data = @("201410212339/21-Oct-2014 23:50 -",
"2251/27-Sep-2014 23:02 -",
"0436/22-Oct-2014 04:47 -",
"091342/09-Oct-2014 13:53 -",
"2220743/22-Oct-2014 07:53 -",
"20140/22-Sep-2014 07:41 -",
"2190446/19-Oct-2014 04:56 -",
"2014258/21-Aug-2014 23:21 -",
"22110/22-Oct-2014 14:21 -",
"1410221721/22-Jun-2014 17:33 -",
"130/23-Jul-2014 11:42 -",
"10231426/23-Feb-2014 14:38 -",
"231731/23-Jan-2014 17:43 -",
"0232039/23-Mar-2014 20:51 -")

从每行末尾删除多余的字符
$data.replace(" -","")

每行前用[datetime]日期表示(以刻度为单位)
$data.replace(" -","") | % { [string]([datetime]::Parse($_.split("/")[1]).ticks) + "@" + $_}

分类
$data.replace(" -","") | % { [string]([datetime]::Parse($_.split("/")[1]).ticks) + "@" + $_} | sort-object

删除前置的日期字符串,如果需要,最后删除垃圾。
$data.replace(" -","") | % { [string]([datetime]::Parse($_.split("/")[1]).ticks) + "@" + $_} | sort-object | %{$_.split("@")[1] + " -"}

结果如下:
231731/23-Jan-2014 17:43 -
10231426/23-Feb-2014 14:38 -
0232039/23-Mar-2014 20:51 -
1410221721/22-Jun-2014 17:33 -
130/23-Jul-2014 11:42 -
2014258/21-Aug-2014 23:21 -
20140/22-Sep-2014 07:41 -
2251/27-Sep-2014 23:02 -
091342/09-Oct-2014 13:53 -
2190446/19-Oct-2014 04:56 -
201410212339/21-Oct-2014 23:50 -
0436/22-Oct-2014 04:47 -
2220743/22-Oct-2014 07:53 -
22110/22-Oct-2014 14:21 -

编辑:

我最初尝试按[datetime]进行排序无法正常工作
[string]([datetime]::Parse($_.split("/")[1]))

这不适合排序,因为它不按年份或时间排序。
用滴答表示[datetime]可解决此问题。
[string]([datetime]::Parse($_.split("/")[1]).ticks)

我已经编辑了上面的代码以反射(reflect)这一点。

关于arrays - 根据每个元素的一部分内容对PowerShell数组进行排序,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30769882/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com