PowerShell对象合并:用非空值补全$null字段的实现方法
PowerShell 哈希表合并:用非空值填充null字段
需求明确:合并两个哈希表,优先保留$tag1的字段值,仅当$tag1对应字段值为$null时,用$tag2的对应值填充。
示例输入
$tag1=@{'Artist'='Madonna';` 'Title'='Like a Prayer';` 'Genre'=$null; } $tag2=@{'Artist'='Madonna';` 'Title'='Like a Prayer (single version)';` 'Genre'='Pop'; }
解决方案:基础遍历法(直观易理解)
先克隆$tag1得到初始结果,确保$tag1的非空值全部保留,再遍历$tag2的键,填充$tag1中为$null的字段:
# 克隆$tag1作为输出的初始值 $output = $tag1.Clone() # 遍历$tag2的所有键 foreach ($key in $tag2.Keys) { # 仅当输出中该键的值为null时,用$tag2的值替换 if ($output[$key] -eq $null) { $output[$key] = $tag2[$key] } }
验证结果
运行上述代码后,$output的内容与预期一致:
$output=@{'Artist'='Madonna';` 'Title'='Like a Prayer';` 'Genre'='Pop'; }
补充:兼容$tag2新增字段的场景
如果需要同时将$tag2中$tag1没有的字段也加入结果,只需修改判断逻辑:
$output = $tag1.Clone() foreach ($key in $tag2.Keys) { # 若输出中无此键,或该键值为null,则使用$tag2的值 if (-not $output.ContainsKey($key) -or $output[$key] -eq $null) { $output[$key] = $tag2[$key] } }
内容的提问来源于stack exchange,提问作者Chris Reeve
相关产品推荐
相关产品推荐

