You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何使用PowerShell更新重复数组对应字段的取值

解决方案

核心实现逻辑为先按Store编号分组聚合出每个Store三个布尔字段的最终取值,再统一更新所有同Store行的对应字段即可,完整调整后的代码如下:

# 导入CSV文件
$testarray = Import-Csv -Path "C:\directory\ocb2021\preprocessings.csv"

# 1. 按Store分组,计算每个Store的hotel、cafe、bar是否至少存在一行为true
$storeFlags = $testarray | Group-Object Store | ForEach-Object {
    $storeRows = $_.Group
    [PSCustomObject]@{
        Store = $_.Name
        # Trim处理字段前后空格,避免格式问题导致匹配失败
        hotel = [bool]($storeRows.hotel.Trim() -contains 'true')
        cafe = [bool]($storeRows.cafe.Trim() -contains 'true')
        bar = [bool]($storeRows.bar.Trim() -contains 'true')
    }
}

# 2. 遍历所有原始行,更新对应字段,其余字段保留原值
foreach ($member in $testarray) {
    $currentFlag = $storeFlags | Where-Object { $_.Store -eq $member.Store } | Select-Object -First 1
    # 转换为小写字符串和原输出格式对齐,需要空格可自行拼接
    $member.hotel = $currentFlag.hotel.ToString().ToLower()
    $member.cafe = $currentFlag.cafe.ToString().ToLower()
    $member.bar = $currentFlag.bar.ToString().ToLower()
}

# 输出预览结果
$testarray | Format-Table
# 如需导出为新CSV可使用下方命令
# $testarray | Export-Csv -Path "C:\directory\ocb2021\processed.csv" -NoTypeInformation -Encoding UTF8

代码说明

  • 采用先分组聚合的方式避免循环内重复查询,执行效率更高,同时避免了原代码中用-match模糊匹配Store可能出现的误匹配问题
  • 内置空格处理逻辑,兼容原始CSV字段前后带空格的情况
  • number等非目标字段完全保留原始值不做修改,和需求要求一致。

内容的提问来源于stack exchange,提问作者Nithu

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.01 18:36:03