Arrays 计算foreach循环中数组中某个对象的出现次数

Arrays 计算foreach循环中数组中某个对象的出现次数,arrays,powershell,loops,count,Arrays,Powershell,Loops,Count,我有一个已导入$products的产品CSV文件 如果某个名称相同的事件发生多次,我希望填充ParentSKU字段,否则将其留空 请原谅伪代码,但我在想象这样的事情: foreach ($item in $products) { if ($item.name.count -gt 1) { $item.ParentSKU = $item.name } else { } # do nothing } $item.name.count不正确,但我希望我的想法是正

我有一个已导入$products的产品CSV文件

如果某个名称相同的事件发生多次,我希望填充ParentSKU字段,否则将其留空

请原谅伪代码,但我在想象这样的事情:

foreach ($item in $products) {
    if ($item.name.count -gt 1) { 
        $item.ParentSKU = $item.name }
    else { } # do nothing
}
$item.name.count不正确,但我希望我的想法是正确的


非常感谢您提供的任何建议

Powershell对象列表不够聪明,无法知道任何一个项目都有多个,因此您必须(手动或其他方式)迭代以查找此处是否有多个

由于您将要对任何副本进行修改,因此手动循环查找副本可能是有意义的,但它并没有真正遵循“powershell”的理念/方法

如果您想使用powershell的内置和强大的管道功能,可以尝试这样的解决方案,使用
Where Object
获取所有具有重复项的PSObject,然后为所有这些PSObject设置值

$products | 
Group-Object -Property Name |
Where-Object -FilterScript {
    $_.Count -gt 1
} |
Select-Object -ExpandProperty Group |
Foreach-Object { $_.ParentSKU = $_.Name }

由于所有内容都是通过引用传递的,因此您的
$products
对象将具有修改后的值

请不要发布代码/数据/错误或其他文本的图像。为什么?因为测试代码的最好方法是使用代码和数据,而你的数据图片意味着你强迫别人输入你已经有的文本。@Lee_Dailey说,谢谢你,非常欢迎!很高兴能帮一点忙。。。[咧嘴笑]我会读一些关于这种方法的书,谢谢你花时间!