簡體   English   中英

如何在 Powershell 中對 arrays 進行分組?

[英]How to group arrays in Powershell?

使用 PowerShell 轉換數組的簡單有效的方法是什么? 初始數組有兩個屬性NumberColor

Number  Color
1       Red
2       Red
3       Red
4       Red
5       Blue
6       Blue
7       Green
8       Green
9       Green

output 陣列應如下所示:

Color   Number
Red     1,2,3,4
Blue    5,6
Green   7,8,9
# Input objects.
$objects = @'
Number,Color
1,Red
2,Red
3,Red
4,Red
5,Blue
6,Blue
7,Green
8,Green
9,Green
'@ | ConvertFrom-Csv

$objects |
  Group-Object Color |
    Select-Object @{ n='Color'; e='Name'}, @{ n='Number'; e={ $_.Group.Number } }

上述產量:

Color Number
----- ------
Blue  {5, 6}
Green {7, 8, 9}
Red   {1, 2, 3, 4}

注意:由於Group-Object的工作方式, Color值在 output 中按字母順序排序。

也可以看看:

使用Group-Object添加@mklement0 的出色答案,我們還可以通過添加-AsHashTable開關將項目分組到System.Collections.Hashtable中。 要迭代哈希表鍵和值,我們必須使用System.Collections.Hashtable.GetEnumerator

$objects = @'
Number,Color
1,Red
2,Red
3,Red
4,Red
5,Blue
6,Blue
7,Green
8,Green
9,Green
'@ | ConvertFrom-Csv

$ht = $objects | Group-Object -Property Color -AsHashTable

$ht.GetEnumerator() | 
    Select-Object @{Name="Color";Expression={$_.Key}}, @{Name="Number";Expression={$_.Value | Select-Object -ExpandProperty Number}}

Output:

Color Number
----- ------
Green {7, 8, 9}
Red   {1, 2, 3, 4}
Blue  {5, 6}

如果我們想按Number對結果進行排序,我們可以使用Sort-Object按第一個數字排序:

$ht.GetEnumerator() | 
    Select-Object @{Name="Color";Expression={$_.Key}}, @{Name="Number";Expression={$_.Value | Select-Object -ExpandProperty Number}} |
        Sort-Object @{Expression={$_.Number[0]}}

或者使用System.Collections.Specialized.OrderedDictionary創建 arrays 的有序哈希表並維護密鑰插入的順序:

$ht = [ordered]@{}
foreach ($object in $objects) {
    if (-not ($ht.Keys -contains $object.Color)) {
        $ht[$object.Color] = @()
    }
    $ht[$object.Color] += $object.Number
}

$ht.GetEnumerator() | 
    Select-Object @{Name="Color";Expression={$_.Key}}, @{Name="Number";Expression={$_.Value}} 

其中將output如下:

Color Number
----- ------
Red   {1, 2, 3, 4}
Blue  {5, 6}
Green {7, 8, 9}

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM