Проблема с сортировкой массива по конкретному столбцу - PullRequest
0 голосов
/ 15 мая 2019

Проблема сортировки массива по определенному столбцу.

[PSObject[]]$arr = @()

$arr += [PSObject]@{
    who = 'z';
    what = 'snake';
    where = 'c1';
    when = 'd1'
}
$arr += [PSObject]@{
    who = 'z';
    what = 'beer';
    where = 'c1';
    when = 'd1'
}
$arr += [PSObject]@{
    who = 'a';
    what = 'snake';
    where = 'c1';
    when = 'd1'
}
$arr += [PSObject]@{
    who = 'b';
    what = 'ape';
    where = 'c1';
    when = 'd1'
}

$arr | Sort-Object what

Вывод:

Name                           Value
----                           -----
where                          c1
who                            a
when                           d1
what                           snake
where                          c1
who                            b
when                           d1
what                           ape
where                          c1
who                            z
when                           d1
what                           snake
where                          c1
who                            z
when                           d1
what                           beer

Таким образом, не отсортировано по «чему».

Любая идея, пожалуйста

1 Ответ

0 голосов
/ 15 мая 2019

Преобразование хеш-таблиц в [PSObject] не соответствует вашим ожиданиям. PSObject уже является базовым типом определяемых вами хеш-таблиц, поэтому ваш код просто создает список хеш-таблиц, а не создает список пользовательских объектов. Для создания пользовательских объектов из хеш-таблиц используйте вместо этого ускоритель типа PSCustomObject (требуется PowerShell v3 или новее, в более старых версиях используйте командлет New-Object).

Демонстрация:

PS C:\> <b>$ht = @{'a'='b'; 'c'='d'}</b>
PS C:\> <b>$ht.GetType().FullName</b>
System.Collections.Hashtable
PS C:\> <b>$ht.PSBase.GetType().FullName</b>
System.Management.Automation.PSObject
PS C:\> <b>$ht</b>

Name                           Value
----                           -----
c                              d
a                              b

PS C:\> <b>$o1 = [PSObject]$ht</b>
PS C:\> <b>$o1.GetType().FullName</b>
<i>System.Collections.Hashtable</i>
PS C:\> <b>$o1.PSBase.GetType().FullName</b>
System.Management.Automation.PSObject
PS C:\> <b>$o1</b>

Name                           Value
----                           -----
c                              d
a                              b

PS C:\> <b>$o2 = [PSCustomObject]$ht</b>
PS C:\> <b>$o2.GetType().FullName</b>
<i>System.Management.Automation.PSCustomObject</i>
PS C:\> <b>$o2.PSBase.GetType().FullName</b>
System.Management.Automation.PSObject
PS C:\> <b>$o2</b>

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