我最近在PowerShell中启动了脚本,并且在按多列排序二维数组时遇到困难。用一行对二维数组排序
以下代码工作正常。我有一个二维数组(5x4),我排列它两列;首先是第二列,然后是第一列。
$table1 = ("hhctrl.ocx",21,503,"Microsoft® HTML Help Control"),("mscomct2.ocx",10,629,"Microsoft Common Controls 2 ActiveX Control DLL"),("msscript.ocx",2,86,"Microsoft ® Script Control"),("sysmon.ocx",15,384,"System Monitor Control"),("tdc.ocx",1,61,"TDC ActiveX Control")
$table1_sorted = $table1 | Sort-Object @{Expression={$_[1]}; Ascending=$false}, @{Expression={$_[0]}; Ascending=$true}
echo (var_dump $table1)
echo (var_dump $table1_sorted)
var_dump
是一个自定义的功能。我创建它来调试数组。 Write-Host
和echo
,它们都使阵列变平并且不会分开项目(项目之间没有逗号),例如
hhctrl.ocx 21 503 Microsoft® HTML Help Control mscomct2.ocx 10 629 Microsoft Common Controls 2 ActiveX Control DLL msscript.ocx 2 86 Microsoft ® Script Control sysmon.ocx 15 384 System Monitor Control tdc.ocx 1 61 TDC ActiveX Control
var_dump
输出:
[
[
"hhctrl.ocx",
21,
503,
"Microsoft® HTML Help Control"
],
[
"mscomct2.ocx",
10,
629,
"Microsoft Common Controls 2 ActiveX Control DLL"
],
[
"msscript.ocx",
2,
86,
"Microsoft ® Script Control"
],
[
"sysmon.ocx",
15,
384,
"System Monitor Control"
],
[
"tdc.ocx",
1,
61,
"TDC ActiveX Control"
]
]
[
[
"hhctrl.ocx",
21,
503,
"Microsoft® HTML Help Control"
],
[
"sysmon.ocx",
15,
384,
"System Monitor Control"
],
[
"mscomct2.ocx",
10,
629,
"Microsoft Common Controls 2 ActiveX Control DLL"
],
[
"msscript.ocx",
2,
86,
"Microsoft ® Script Control"
],
[
"tdc.ocx",
1,
61,
"TDC ActiveX Control"
]
]
现在,如果我用另一个阵列, “表” 与只有一行,分拣变平的阵列。
$table2 = ,("hhctrl.ocx",21,503,"Microsoft® HTML Help Control")
$table2_sorted = $table2 | Sort-Object @{Expression={$_[1]}; Ascending=$false}, @{Expression={$_[0]}; Ascending=$true}
echo (var_dump $table2)
echo (var_dump $table2_sorted)
输出:
[
[
"hhctrl.ocx",
21,
503,
"Microsoft® HTML Help Control"
]
]
[
"hhctrl.ocx",
21,
503,
"Microsoft® HTML Help Control"
]
这种情况发生时,只有一个排。这是为什么?
这是变平的一个项目阵列的管道。使用'排序对象 - 输入对象$ table2',它不会发生 –
@ MathiasR.Jessen你的建议似乎没有工作。它只是返回'$ table2'(也是'$ table1')不变。我检查了[Sort-Object | SS64.com](http://ss64.com/ps/sort-object.html)和[如何使用-InputObject工作?](http://stackoverflow.com/a/35292369/2202732)。没有任何显式使用'-InputObject'的例子。你能提供一个工作代码吗? – akinuri
'$ table2_sorted = @($ table2 | Sort-Object ...)' – PetSerAl