Сортировка объектов и целых чисел
Привет, ребята, я пытаюсь сортировать 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 видит их как текстовые строки. Вам нужно разобрать эти текстовые строки на фактические целые числа или другой числовой тип, а затем сортировать.