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 其中 Keys 是 Name
属性 和 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
我想将相同名称的计数相加。 该数组看起来像这样:
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}}
感谢四位的帮助!
Name
属性 和 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