Oct*_*ave 4 sorting powershell
我是 Powershell 的新手,但这让我有点疯狂。我在这里查看了各种问题,但找不到答案,所以我就在这里。如果已经涵盖了这一点,我们深表歉意。
我有两个包含数字列的文本文件。我想创建一个包含这两列的数组,并按第 1 列或第 2 列对其进行排序。
如果我们有
$a=@(1,5,10,15,25)
$b=@(100,99,98,99,10)
Run Code Online (Sandbox Code Playgroud)
我们创造
c$=$a,$b
Run Code Online (Sandbox Code Playgroud)
我最初的想法是尝试这样的事情:
$c | sort { [int]$_[0] }
Run Code Online (Sandbox Code Playgroud)
但这不起作用。我尝试过很多不同的事情,所以任何建议将不胜感激。
我正在编辑这个,因为我的问题不太清楚。最终,如果我按升序第 2 列对 $c 进行排序,我期望类似:
25,10
10,98
5,99
15,99
1,100
Run Code Online (Sandbox Code Playgroud)
知道如何实现这一目标吗?
我不确定你是如何声明你的维度数组的,因为你希望它像这样或类似的东西声明
$c = @(@(1,100),@(5,99),@(10,98),@(15,99),@(25,10))
Run Code Online (Sandbox Code Playgroud)
如果处于那种状态,那么排序就轻而易举了
$c | Sort-Object @{Expression={$_[1]}; Ascending=$True} | %{
"$($_[0]),$($_[1])"
}
Run Code Online (Sandbox Code Playgroud)
Sort-Object
对于一维数组效果很好。当涉及多个属性时,您需要指定要按哪个属性进行排序以获得预期的输出。由于没有,我们使用计算表达式来基于第二个“列”进行计算。
样本输出
25,10
10,98
5,99
15,99
1,100
Run Code Online (Sandbox Code Playgroud)
如果您确实想像这样使用数组,我们需要一个中间步骤来将您所拥有的内容转换为如何按照您期望的方式对其进行排序。
$a=@(1,5,10,15,25)
$b=@(100,99,98,99,10)
$c = @()
for($i = 0;$i -lt $a.Count; $i++){
$c += ,@($a[$i],$b[$i])
}
Run Code Online (Sandbox Code Playgroud)
运行此代码后,$c
它将像我的排序一样工作。