本文介绍了GROUP-对象,获取计数的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!
问题描述
给定一个包含一些重复项的列表,我可以使用Group-Object -AsHashtable
,我得到一个哈希表,其中似乎有包含项名称的键,而值是我无法识别的内容。
因此,给定
$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(Core)7+中修复-有关详细信息,请参阅GitHub issue #6933。
解决办法:在Windows PowerShell中,始终将-AsHashTable
与-AsString
组合在一起,即使输入对象或分组属性值已经是字符串。
# Note: .B.Count is equivalent to ['B'].Count
PS> ('A', 'B', 'C', 'B', "c", 'C' | Group-Object -AsHashTable -AsString).B.Count
2 # OK, thanks to -AsString (not necessary in PowerShell 7+)
这绕过了错误,否则会表现为:原本应该成为哈希表键的字符串意外地包装在不可见的[psobject]
包装器中,这反过来又会阻止基于字符串的键查找。
(('A', 'B', 'C', 'B', "c", 'C' | Group-Object -AsHashTable).B
在Windows PowerShell中生成$null
。)
注意:隐含的意思是,如果希望密钥属于字符串以外的数据类型(例如[int]
),则不能在Windows PowerShell中使用-AsHashtable
,因为对于此类数据类型,无法绕过不可见的[psobject]
包装。
这篇关于GROUP-对象,获取计数的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持!