PowerShell如何基于映射关系为数组元素及对象添加额外属性
PowerShell 实现方案
首先推荐用哈希表存储映射关系,针对100+条目的映射场景,O(1)的查找效率远高于分支判断语句,实现逻辑如下:
1. 先定义映射关系哈希表
$carManufacturerMap = @{ "OPEL" = "GM" "BMW" = "Bayerishe Motoren Werke" "AUDI" = "Volkswagen group" "FORD" = "FORD Motor Company" # 剩余的所有映射条目按照上述格式补充即可 }
2. 处理不同类型的数组元素
场景A:数组元素为哈希表(你当前展示的场景)
直接遍历每个哈希表,追加manufacturer键值对即可:
foreach ($record in $Records) { $record["manufacturer"] = $carManufacturerMap[$record["car"]] # 若存在未收录的car值可加兜底逻辑,示例: # $record["manufacturer"] = $carManufacturerMap.ContainsKey($record["car"]) ? $carManufacturerMap[$record["car"]] : "未匹配厂商" }
场景B:数组元素为带属性的PS自定义对象
两种实现方式可选:
- 直接修改原对象,追加属性:
foreach ($record in $Records) { $mf = $carManufacturerMap[$record.car] $record | Add-Member -MemberType NoteProperty -Name "manufacturer" -Value $mf -Force # -Force参数可避免属性已存在时报错 }
- 不修改原数组,生成带新属性的新对象数组(通用写法,也兼容哈希表场景):
$newRecords = $Records | Select-Object *, @{ Name = "manufacturer" Expression = { $carManufacturerMap[$_.car] } }
内容的提问来源于stack exchange,提问作者Georgi Gochev
相关产品推荐
相关产品推荐

