powershell排序多维数组

时间:2015-04-08 11:51:58

标签: sorting powershell

我是Powershell的新手,但这让我有点疯狂。我在这里看过各种各样的问题,但是找不到答案所以我走了。如果已经涵盖了这一点,请道歉。

我有两个包含数字列的文本文件。我想创建一个包含这2列的数组,并按列1或2进行排序。

如果我们有

$a=@(1,5,10,15,25)
$b=@(100,99,98,99,10)

我们创建

c$=$a,$b

我最初的想法是尝试这样的事情:

$c | sort { [int]$_[0] }

但它不起作用。我尝试了很多不同的东西,所以任何建议都会受到赞赏。

我正在编辑这个,因为我的问题不太清楚。最后,如果我按升序第2列排序$ c,我希望得到类似的结果:

25,10
10,98
5,99
15,99
1,100

知道如何实现这个目标吗?

2 个答案:

答案 0 :(得分:3)

我不确定你是如何声明你的维度数组的,因为它就像你希望它被声明为像这样或类似的东西

$c = @(@(1,100),@(5,99),@(10,98),@(15,99),@(25,10))

如果它处于那种状态,那么排序是轻而易举的

$c | Sort-Object @{Expression={$_[1]}; Ascending=$True} | %{
    "$($_[0]),$($_[1])"
}

Sort-Object适用于一维数组。当涉及多个属性时,您需要指定要排序的属性以获得预期的输出。由于没有,我们使用计算表达式来基于第二个"列"。

示例输出

25,10
10,98
5,99
15,99
1,100

如果确实希望使用您的数组,我们需要一个中间步骤来转换您所拥有的数据,以及如何按照您期望的方式对其进行排序。

$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])
}

运行此代码后$c将像我的排序一样工作。

答案 1 :(得分:1)

欢迎来到powershell世界。语法与经典编程语言略有不同,通常cmdlet从当前管道获取输入。在这种情况下,您谈到的命令是Sort-Object,您可以直接将其用于具有数组内容的管道内容

$c = ($a | Sort-Object), ($b | Sort-Object)