如果我有一个数组:
1 1 1 2 2 3 4 4 4 4 5 5
如何使用Powershell告诉我该数组中每个元素的数量?
更清楚地说,我应该为每个数组元素单独计数:
元素:计数
1:3
2:2
3:1
4:4
5:2
如果我有一个数组:
1 1 1 2 2 3 4 4 4 4 5 5
如何使用Powershell告诉我该数组中每个元素的数量?
更清楚地说,我应该为每个数组元素单独计数:
元素:计数
1:3
2:2
3:1
4:4
5:2
Group-Object
命令:PS> 1,1,1,2,2,3,4,4,4,4,5,5 | group
Count Name Group
----- ---- -----
3 1 {1, 1, 1}
2 2 {2, 2}
1 3 {3}
4 4 {4, 4, 4, 4}
2 5 {5, 5}
如果您想要一个存储项目及其计数的哈希表,只需在其后添加一些 ForEach-Object
即可:
$array | group | % { $h = @{} } { $h[$_.Name] = $_.Count } { $h }
Group-Object
cmdlet 按相等性对输入对象进行分组。-Property
)。
Group-Object
输出代表相等输入对象的组的 [Microsoft.PowerShell.Commands.GroupInfo]
对象,其值得注意的属性是:
.Values
... 定义该组的值,作为 [System.Collections.ArrayList]
实例(在这种情况下,由于使用输入对象作为整体来形成组,因此只有1个元素)。
.Count
... 该组中对象的计数。
-NoElement
来提高效率。Select-Object
与计算属性。PS> 1, 1, 1, 2, 2, 3, 4, 4, 4, 4, 5, 5 | Group-Object -NoElement |
Select-Object @{ n='Element:Count'; e={ '{0}:{1}' -f $_.Values[0], $_.Count } }
Element:Count
-------------
1:3
2:2
3:1
4:4
5:2
PS> $ht= 1,1,1,2,2,3,4,4,4,4,5,5 | Group-Object -AsHashTable -AsString
PS> $ht
Name Value
---- -----
2 {2, 2}
4 {4, 4, 4, 4}
5 {5, 5}
1 {1, 1, 1}
3 {3}
PS> $ht['1']
1
1
1
-AsHashTable
帮助不大。 - Joey$ht['#'].count
, in System.Collections.Hashtable
it contains a method called count
- Riley Carney
1 1 1 2 2 3 4 4 4 4 5 5
,我需要返回4
。 - Ifedi Okonkwo1,1,1,2,2,3,4,4,4,4,5,5 | group -NoElement | sort Count | select -last 1 -expandProperty Name
。虽然有点长,但管道中的每个部分都只做一件事,并且组合得很好。另一个选项是将获取值和选择最后一个值分开处理,使用... | group -NoElement | sort Count | % Name | select -last 1
。 - Joey$hash = $Array | group | % { $h = @{} } { $h[$_.Name] = $_.Count } { $h }; $mode = $hash.GetEnumerator() | Sort-Object -Property Value -Descending | Select-Object -First 1
。 - Ifedi Okonkwo