排序对象和整数

Scr*_*rry 14 sorting powershell

嘿伙计们,我正在尝试用CSV文件中的数字对colomn进行排序.但不知怎的,它不起作用.示例CSV:

Orange;65
Red;160
Green;140
White;110
Purple;85
Run Code Online (Sandbox Code Playgroud)

这是我尝试过的一段代码:

$csv = Import-Csv -Header "Color", "Number" -delimiter ';' data.csv
$csv | Sort-Object Number
Run Code Online (Sandbox Code Playgroud)

这给了我以下输出:

Color                Number
-----                ------
White                110
Green                140
Red                  160
Orange               65
Purple               85
Run Code Online (Sandbox Code Playgroud)

显然不是正确的顺序.有人可以解释一下如何解决这个问题吗?谢谢!

Fro*_* F. 35

Import-CSVstrings默认情况下导入csv列.您需要int在按值排序之前将其强制转换,而不是"按字母顺序排序".例如:

$csv = Import-Csv -Header "Color", "Number" -delimiter ';' data.csv
$csv | % { $_.Number = [int]$_.Number }
$csv | Sort-Object Number

Color  Number
-----  ------
Orange     65
Purple     85
White     110
Green     140
Red       160
Run Code Online (Sandbox Code Playgroud)

作为替代方案,您可以在排序时进行转换,如下所示:

$csv = Import-Csv -Header "Color", "Number" -delimiter ';' data.csv
$csv | Sort-Object @{e={$_.Number -as [int]}}
Run Code Online (Sandbox Code Playgroud)

甚至更短 $csv | Sort-Object { [int]$_.Number }

  • 表达。它是您用来在 powershell 中指定属性的东西。在 `select-object` 中创建自定义字段的示例:`select-object @{name="displayedname";expression={code to generate value using ex $_.property etc.} }`。`Sort-Object` 不需要列名来排序,所以我只使用了表达式。 (2认同)