【发布时间】:2022-01-10 17:29:26
【问题描述】:
给定一个包含一些重复项目的列表,我可以使用 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。我错过了什么?
【问题讨论】:
-
嗯,不太清楚为什么这不起作用。同时,在聪明人回答这个问题之前,您可以尝试:
$grouped.GetEnumerator().Where{$_.Name -eq 'B'}.Value.Count;) -
@abraham-zinala,这是一个可行的解决方法,如果它被证明是一个错误,而不是我做错了什么。
-
嗯.....我使用了
-AsString开关,它给了我正确的结果:$grouped = $array | Group-Object -AsHashTable -AsString; $grouped['b'].Count。猜猜你现在可以这样做。确实很奇怪! @mklement0,对此有何想法? -
这显然是 5.1 的一个错误。即使
$grouped.ContainsKey('B')也会产生$false。在 Core 上运行良好。 -
嗯,这似乎以前已经注意到了,我很惊讶现在才发现这一点。 powershell.one/bugs/windows-powershell/group-object。 @Gordon 我建议您采用经典方法来构建哈希表,以防您不想使用
-AsString开关,正如 Abraham 指出的那样。使用.GetEnumerator()即使它有效,也会消除正确hashtable的所有优良品质(效率)。
标签: powershell hashtable group-object