Сортировать данные с использованием одного поля по убыванию, а затем по возрастанию на втором поле? - PullRequest
0 голосов
/ 04 декабря 2018

В сценарии PowerShell мне бы хотелось отсортировать массив пользовательских объектов по одному полю, по убыванию, а затем по возрастанию.

Однако функция Sort-Object допускает только одну спецификацию сортировки (еслиЯ знаю).

Как сортировать, используя сложную сортировку?

В SQL я бы использовал Order by Date ASC, SomeField DESC.Есть ли эквивалент в PowerShell?

Для иллюстрации приведем небольшое репродукцию:

$data = @(
    New-Object PSObject -Property @{ SomeInt = 2 ; SomeText = "a" }
    New-Object PSObject -Property @{ SomeInt = 2 ; SomeText = "b" }
    New-Object PSObject -Property @{ SomeInt = 2 ; SomeText = "c" }
    New-Object PSObject -Property @{ SomeInt = 3 ; SomeText = "d" }
    New-Object PSObject -Property @{ SomeInt = 3 ; SomeText = "e" }
    New-Object PSObject -Property @{ SomeInt = 3 ; SomeText = "f" }
    New-Object PSObject -Property @{ SomeInt = 1 ; SomeText = "g" }
    New-Object PSObject -Property @{ SomeInt = 1 ; SomeText = "h" }
    New-Object PSObject -Property @{ SomeInt = 1 ; SomeText = "i" }
    New-Object PSObject -Property @{ SomeInt = 0 ; SomeText = "j" }
    New-Object PSObject -Property @{ SomeInt = 0 ; SomeText = "k" }
    New-Object PSObject -Property @{ SomeInt = 0 ; SomeText = "l" }
    New-Object PSObject -Property @{ SomeInt = 0 ; SomeText = "m" }
    New-Object PSObject -Property @{ SomeInt = 0 ; SomeText = "n" }
)

$data | Sort -Descending SomeInt, SomeText | Select SomeInt, SomeText

Вывод:

SomeInt SomeText
------- --------
      3 f       
      3 e       
      3 d       
      2 c       
      2 b       
      2 a       
      1 i       
      1 h       
      1 g       
      0 n       
      0 m       
      0 l       
      0 k       
      0 j    

Однако я бы хотел SomeText заказывать по возрастанию ...

1 Ответ

0 голосов
/ 04 декабря 2018

Применение порядка сортировки с хэш-таблицей, похоже, искажает порядок свойств,
, поэтому вам потребуется Select-Object для восстановления правильного порядка

$data | Sort-Object -Property @{e="SomeInt";Descending=$True},
                              @{e="SomeText";Descending=$False}|
    Select-Object SomeInt,SomeText

Пример вывода:

SomeInt SomeText
------- --------
      3 d
      3 e
      3 f
      2 a
      2 b
      2 c
      1 g
      1 h
      1 i
      0 j
      0 k
      0 l
      0 m
      0 n

РЕДАКТИРОВАТЬ: Это не Sort-Object, который не соответствует данному заказу, это New-Object

> New-Object PSObject -Property @{ SomeInt = 2 ; SomeText = "a" }

SomeText SomeInt
-------- -------
a              2

> New-Object PSObject -Property @{ SomeText = "a" ; SomeInt = 2 }

SomeText SomeInt
-------- -------
a              2
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...