Powershell对象数组将具有相同值的对象加在一起

Powershell array of objects add together objects with same value

我想将相同名称的计数相加。 该数组看起来像这样:

Name  Count
----  -----
6027     12
4999      6
3018      5
1008      3
1006     19
6027     12
4065     10
3018      9
4999      7
489       4
1008      3
5016     19

我想将所有同名的计数相加。 想要的结果如下所示:

Name  Count
----  -----
6027     24
4999      6
3018     14
1008      6
1006     19
4065     10
4999      7
489       4
5016     19

到目前为止,我最好的做法是按名称对对象进行分组,但这不会产生所需的输出。 (数字与上例略有不同)

$list | Group-Object name | sort count -Descending
$list

输出:

Count Name                      Group                                                                                                                                                             
----- ----                      -----                                                                                                                                                             
    8 3018                      {@{Name=3018; Count=5}, @{Name=3018; Count=9}, @{Name=3018; Count=9}, @{Name=3018; Count=9}...}                                                                   
    7 6027                      {@{Name=6027; Count=12}, @{Name=6027; Count=12}, @{Name=6027; Count=12}, @{Name=6027; Count=12}...}                                                               
    7 4999                      {@{Name=4999; Count=6}, @{Name=4999; Count=7}, @{Name=4999; Count=16}, @{Name=4999; Count=12}...}                                                                 
    7 1008                      {@{Name=1008; Count=3}, @{Name=1008; Count=3}, @{Name=1008; Count=3}, @{Name=1008; Count=3}...}                                                                   
    4 1006                      {@{Name=1006; Count=19}, @{Name=1006; Count=12}, @{Name=1006; Count=6}, @{Name=1006; Count=30}}                                                                   
    3 4065                      {@{Name=4065; Count=10}, @{Name=4065; Count=35}, @{Name=4065; Count=30}}                                                                                          
    3 5016                      {@{Name=5016; Count=19}, @{Name=5016; Count=18}, @{Name=5016; Count=20}}

感谢四位的帮助!

proposes a nice and efficient solution to the problem using a hash table 其中 KeysName 属性 和 Values[=21] 的唯一值=] 是 Count 属性 的总和。我们可以使用生成的哈希 table 来更新您已有的对象。

以下示例假定 $obj 具有您在问题中显示的对象数组。

$map = @{}
foreach($i in $obj) {
    $map[$i.Name] += [int] $i.Count
}

foreach($i in $obj) {
    $i.Count = $map[$i.Name]
}

$obj # => Should be now updated