PowerShell如何按car属性去重数组并对count属性值求和
PowerShell 按car属性去重并累加count的实现方法
有两种常用的实现方式,分别适配不同的使用场景:
方案1:使用内置分组命令实现(写法最简)
直接利用PowerShell原生的Group-Object分组命令配合求和统计即可实现,代码量最少:
# 直接对$Records数组按car属性分组,分组后累加每组count值 $Records | Group-Object -Property car | ForEach-Object { [PSCustomObject]@{ car = $_.Name count = ($_.Group | Measure-Object -Property count -Sum).Sum } }
输出结果默认按car名称字母排序,如果你需要自定义排序可以在管道最后加Sort-Object调整顺序。
方案2:使用哈希表统计实现(性能最优)
如果数组数据量较大,用哈希表遍历统计的性能会明显优于分组命令,还可以支持保留car首次出现的顺序:
# 声明有序哈希表用于统计,保留car首次出现的顺序 $countStat = [ordered]@{} foreach ($item in $Records) { if ($countStat.ContainsKey($item.car)) { # 已存在的car直接累加count $countStat[$item.car] += $item.count } else { # 首次出现的car初始化统计值 $countStat[$item.car] = $item.count } } # 转换为目标格式输出 $countStat.GetEnumerator() | ForEach-Object { [PSCustomObject]@{ car = $_.Key count = $_.Value } }
该方案输出顺序和你示例需求的顺序完全一致:OPEL、BMW、AUDI、FORD。
两种方案最终的输出内容都和你预期的结果一致,直接遍历输出即可得到你给出的目标格式。
内容的提问来源于stack exchange,提问作者Georgi Gochev
相关产品推荐
相关产品推荐

