powershell - 组对象,获取计数

标签 powershell hashtable group-object

给定一个包含一些重复项目的列表,我可以使用 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 结合使用,即使输入对象或分组属性值已经 字符串。 帽子的提示 Abraham Zinala .

# 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] 包装器中,它在turn 阻止基于字符串的键查找。
(('A', 'B', 'C', 'B', "c", 'C' | Group-Object -AsHashTable).B 产生 $null 在 Windows PowerShell 中。)

注意:这意味着如果您希望键的数据类型不是字符串,则您不能在 Windows PowerShell 中使用 -AsHashtable(例如 [int]),因为对于此类数据类型,无法绕过不可见的 [psobject] 包装。

关于powershell - 组对象,获取计数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/70229678/

相关文章:

PowerShell - 组对象性能不佳

linux - 通过Linux的powershell使用私钥自动进行ssh登录?

powershell - 从文件到函数内部的全局范围的点源函​​数

powershell - 如果窗口名称存在,如何退出powershell脚本?

实现哈希表时的 C 段错误 11

java - 使用哈希表的电话簿

Powershell 仅当基于列 1 的组的列 2 -cge 列 3 时才显示行

powershell - 微软在 PowerShell CmdLet 参数命名方面的一致性

c - 使用动态内存分配和重新散列哈希表在 C 编程中实现哈希表

powershell - PowerShell:导入CSV文件,计数组大小和输出到原始文件,并在计数后添加新列