Сортировка объектов и целых чисел

Привет, ребята, я пытаюсь сортировать colomn с числами в CSV файле. Но почему-то это не сработает. Пример CSV:

Orange;65
Red;160
Green;140
White;110
Purple;85

Это часть кода, с которой я его попробовал:

$csv = Import-Csv -Header "Color", "Number" -delimiter ';' data.csv
$csv | Sort-Object Number

Что дает мне следующий результат:

Color                Number
-----                ------
White                110
Green                140
Red                  160
Orange               65
Purple               85

Очевидно, что не в правильном порядке. Может кто-нибудь, пожалуйста, объясните мне, как решить эту проблему? Спасибо!

Ответ 1

Import-CSV по умолчанию импортирует столбцы csv как strings. Вам нужно передать его в 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

В качестве альтернативы вы можете использовать его при сортировке, например:

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

или даже короче $csv | Sort-Object { [int]$_.Number }

Ответ 2

Похоже, функция sort видит их как текстовые строки. Вам нужно разобрать эти текстовые строки на фактические целые числа или другой числовой тип, а затем сортировать.