本文介绍了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-对象,获取计数的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持!

08-11 11:15