簡體   English   中英

Powershell組對象數組列表

[英]Powershell Group-object array list

數組列表中添加了兩個逗號分隔的項目,我想將它們分組以計算總數。

$list_distinct = [System.Collections.ArrayList]@()
$list_distinct.Add("Site A,Item A")
$list_distinct.Add("Site A,Item A")
$list_distinct.Add("Site A,Item B")
$list_distinct.Add("Site B,Item C")
$list_distinct.Add("Site B,Item D")
$list_distinct.Add("Site B,Item D")

試過這個:

$test = $list_distinct | Group-Object Values

結果顯示計數(總數),名稱(空)和組(全部添加的項目)。

有任何解決這個問題的方法嗎? 還是有更好的方法?

所需的輸出示例:

Site   | Item   | Count
Site A | Item A |   2
Site A | Item B |   1
Site B | Item C |   1
Site B | Item D |   2

ArrayList對象及其元素都不具有Values屬性。 不存在的屬性將擴展為空結果,因此所有值都分組在相同(空)名稱下。

改變這個

$list_distinct | Group-Object Values

進入這個

$list_distinct | Group-Object

問題就會消失。

對於所需的輸出,您還需要拆分值並創建新的(自定義)對象:

$list_distinct | Group-Object | ForEach-Object {
    $site, $item = $_.Name -split ','
    New-Object -Type PSObject -Property @{
        'Site'  = $site
        'Item'  = $item
        'Count' = $_.Count
    }
} | Select-Object Site, Item, Count

尾隨的Select-Object將強制執行字段順序,因為默認情況下未對PowerShell哈希表進行排序。

在PowerShell v3和更高版本中,您可以簡化為

$list_distinct | Group-Object | ForEach-Object {
    $site, $item = $_.Name -split ','
    [PSCustomObject]@{
        'Site'  = $site
        'Item'  = $item
        'Count' = $_.Count
    }
}

這里不需要尾隨的Select-Object ,因為[PSCustomObject]類型加速器隱式使用有序哈希表。

暫無
暫無

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

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