【问题标题】:Count occurrences of something in an array inside a foreach loop计算 foreach 循环内数组中某些内容的出现次数
【发布时间】:2020-10-15 09:59:20
【问题描述】:

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

如果某件事以相同的名称出现不止一次,我想填充 ParentSKU 字段,否则将其留空。

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

foreach ($item in $products) {
    if ($item.name.count -gt 1) { 
        $item.ParentSKU = $item.name }
    else { } # do nothing
}

$item.name.count 不正确,但我希望我的想法是正确的?

非常感谢您的建议

【问题讨论】:

  • 请不要发布代码/数据/错误或其他文本的图像。为什么?因为测试代码的最佳方法是使用代码和数据——而你的数据图片意味着你强迫其他人输入你已经拥有的文本。
  • @Lee_Dailey 表示感谢
  • 不客气!很高兴能帮上一点忙……[grin]

标签: arrays powershell loops count


【解决方案1】:

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 对象将具有修改后的值!

【讨论】:

  • 我会阅读一下这种方法,感谢您抽出宝贵时间!
猜你喜欢
  • 2017-03-28
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2013-01-04
  • 2016-03-23
  • 2017-06-17
  • 2011-09-07
  • 1970-01-01
相关资源
最近更新 更多