Powershell 组对象数组列表
Powershell Group-object array list
在数组列表中添加了两个逗号分隔的项目,我想将它们分组以计算总数。
$list_distinct = [System.Collections.ArrayList]@()
$list_distinct.Add("Site A,Item A")
$list_distinct.Add("Site A,Item A")
$list_distinct.Add("Site A,Item B")
$list_distinct.Add("Site B,Item C")
$list_distinct.Add("Site B,Item D")
$list_distinct.Add("Site B,Item D")
试过这个:
$test = $list_distinct | Group-Object Values
结果显示Count(全部总数),Name(空)和Group(全部添加项)。
有什么办法可以解决这个问题吗?或者有什么更好的方法吗?
期望的输出示例:
Site | Item | Count
Site A | Item A | 2
Site A | Item B | 1
Site B | Item C | 1
Site B | Item D | 2
ArrayList
对象及其元素都没有 属性 Values
。不存在的属性将扩展为空结果,因此您的所有值都分组在相同(空)名称下。
改变这个
$list_distinct | Group-Object Values
进入这个
$list_distinct | Group-Object
问题就会消失。
对于您想要的输出,您还需要拆分值并创建新的(自定义)对象:
$list_distinct | Group-Object | ForEach-Object {
$site, $item = $_.Name -split ','
New-Object -Type PSObject -Property @{
'Site' = $site
'Item' = $item
'Count' = $_.Count
}
} | Select-Object Site, Item, Count
尾部 Select-Object
是为了强制执行字段顺序,因为默认情况下 PowerShell 哈希表不排序。
在 PowerShell v3 和更新版本中,您可以将其简化为
$list_distinct | Group-Object | ForEach-Object {
$site, $item = $_.Name -split ','
[PSCustomObject]@{
'Site' = $site
'Item' = $item
'Count' = $_.Count
}
}
此处不需要结尾的 Select-Object
,因为 [PSCustomObject]
类型加速器隐式使用有序哈希表。
在数组列表中添加了两个逗号分隔的项目,我想将它们分组以计算总数。
$list_distinct = [System.Collections.ArrayList]@()
$list_distinct.Add("Site A,Item A")
$list_distinct.Add("Site A,Item A")
$list_distinct.Add("Site A,Item B")
$list_distinct.Add("Site B,Item C")
$list_distinct.Add("Site B,Item D")
$list_distinct.Add("Site B,Item D")
试过这个:
$test = $list_distinct | Group-Object Values
结果显示Count(全部总数),Name(空)和Group(全部添加项)。
有什么办法可以解决这个问题吗?或者有什么更好的方法吗?
期望的输出示例:
Site | Item | Count
Site A | Item A | 2
Site A | Item B | 1
Site B | Item C | 1
Site B | Item D | 2
ArrayList
对象及其元素都没有 属性 Values
。不存在的属性将扩展为空结果,因此您的所有值都分组在相同(空)名称下。
改变这个
$list_distinct | Group-Object Values
进入这个
$list_distinct | Group-Object
问题就会消失。
对于您想要的输出,您还需要拆分值并创建新的(自定义)对象:
$list_distinct | Group-Object | ForEach-Object {
$site, $item = $_.Name -split ','
New-Object -Type PSObject -Property @{
'Site' = $site
'Item' = $item
'Count' = $_.Count
}
} | Select-Object Site, Item, Count
尾部 Select-Object
是为了强制执行字段顺序,因为默认情况下 PowerShell 哈希表不排序。
在 PowerShell v3 和更新版本中,您可以将其简化为
$list_distinct | Group-Object | ForEach-Object {
$site, $item = $_.Name -split ','
[PSCustomObject]@{
'Site' = $site
'Item' = $item
'Count' = $_.Count
}
}
此处不需要结尾的 Select-Object
,因为 [PSCustomObject]
类型加速器隐式使用有序哈希表。