簡體   English   中英

組對象,獲取計數

[英]Group-Object, get counts

給定一個包含一些重復項目的列表,我可以使用Group-Object -AsHashtable並得到一個 hash 表,該表似乎具有項目名稱的鍵,而值是我不認識的。

所以,給定

$array = [System.Collections.Generic.List[String]]@('A', 'B', 'C', 'B', "c", 'C')
$grouped = $array | Group-Object -AsHashTable

$grouped將是

Name                           Value                                                                                                                                                                                                                                              
----                           -----                                                                                                                                                                                                                                              
A                              {A}                                                                                                                                                                                                                                                
B                              {B, B}                                                                                                                                                                                                                                             
C                              {C, c, C}  

那時我會認為$grouped['B'].Count$grouped.'B'.Count會產生正確的計數 2。但我得到 0。我錯過了什么?

Windows PowerShell中看到了一個錯誤,該錯誤已在PowerShell(核心)7+中修復 - 請參閱ZD3B7C9233CD04EBFEC0EEC9的詳細信息。

解決方法:在 Windows PowerShell 中,始終將-AsHashTable-AsString結合使用,即使輸入對象或分組屬性值已經字符串。 亞伯拉罕·齊納拉致敬

PS> ('A', 'B', 'C', 'B', "c", 'C' | Group-Object -AsHashTable -AsString).B.Count

2 # OK, thanks to -AsString (not necessary in PowerShell 7+)

這繞過了該錯誤,否則該錯誤表現如下:旨在成為哈希表鍵的字符串意外地包裝在不可見的[psobject]包裝器中,這反過來又阻止了基於字符串的鍵查找。

注意:這意味着如果您希望鍵是字符串以外的數據-AsHashtable (例如[int] ),則不能在 Windows PowerShell 中使用 -AsHashtable ,因為對於此類數據類型,無法繞過不可見的[psobject]包裝。

試試下面的(它對我有用,見圖片)

$array = [System.Collections.Generic.List[String]]@('A', 'B', 'C', 'B', "c", 'C')
$grouped = $array | Group-Object -AsHashTable
$grouped.B 
$grouped.B.Count

Write-Host $grouped.B.Count

$b = $grouped.B.Count
Write-Host "The Number of Values in Column B Is - $b"

在此處輸入圖像描述

暫無
暫無

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

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