我想在powershell中创建多维数组,我尝试过这种方式并且它有效,但我想简化它以使其没有重复 name
和 pn
。哪位大神可以给点意见,万分感谢
$array = @(
[PSCustomObject]@{name = 'PRODCT_1'; pn = 'gra-001'}
[PSCustomObject]@{name = 'PRODCT_11a'; pn = 'ght-001'}
[PSCustomObject]@{name = 'PRODCT_ca1'; pn = 'hasha-001'}
[PSCustomObject]@{name = 'PRODCT_ga1'; pn = '45-001'}
[PSCustomObject]@{name = 'PRODCT_4a1'; pn = 'aert-001'}
[PSCustomObject]@{name = 'PRODCT_ata41'; pn = '43-001'}
)
最佳答案
这会创建一个实际多维数组作为生成[pscustomobject]
的数组的基础:
# Create multidimensional array
$temp = ('PRODCT_1', 'gra-001'),
('PRODCT_11a', 'ght-001'),
('PRODCT_ca1', 'hasha-001'),
('PRODCT_ga1', '45-001'),
('PRODCT_4a1', 'aert-001'),
('PRODCT_ata41', '43-001')
# Create single-dimensional array of pscustomobject
$array = $temp | Select-Object @{ n='name'; e={ $_[0] }},
@{ n='pn'; e={ $_[1] }}
# Output to console
$array
如果您愿意,也可以使用单个语句来执行此操作,而无需使用临时变量:
$array = (
('PRODCT_1', 'gra-001'),
('PRODCT_11a', 'ght-001'),
('PRODCT_ca1', 'hasha-001'),
('PRODCT_4a1', 'aert-001'),
('PRODCT_ata41', '43-001')
) | Select-Object @{ n='name'; e={ $_[0] }}, @{ n='pn'; e={ $_[1] }}
使用内在 .ForEach
的更简洁的替代方案直接创建[PSCustomObject]
数组元素的方法:
$array = (
('PRODCT_1', 'gra-001'),
('PRODCT_11a', 'ght-001'),
('PRODCT_ca1', 'hasha-001'),
('PRODCT_4a1', 'aert-001'),
('PRODCT_ata41', '43-001')
).ForEach{ [PSCustomObject]@{ name = $_[0]; pn = $_[1] } }
后者也是最有效的方式,因为它不涉及管道参数绑定(bind)开销。
每个都产生相同的输出:
name pn
---- --
PRODCT_1 gra-001
PRODCT_11a ght-001
PRODCT_ca1 hasha-001
PRODCT_ga1 45-001
PRODCT_4a1 aert-001
PRODCT_ata41 43-001
Select-Object
解决方案说明:
对于 $temp
的每一“行”,Select-Object
命令使用 calculated properties将数组元素转换为对象属性。
E. G。它采用行 ('PRODCT_1', 'gra-001')
,这是一个由两个元素组成的数组。然后 @{ n='name'; e={ $_[0] }}
得到处理,它将索引 0 ('PRODCT_1'
) 处的元素分配给属性 name
。然后 @{ n='pn'; e={ $_[1] }}
得到处理,它将索引 1 ('gra-001'
) 处的元素分配给属性 pn
。
对所有剩余的行重复这个过程,我们得到一个存储在 $array
中的对象数组,就像您的原始代码一样。
关于arrays - 如何使用 Powershell 简化多维数组?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/72254154/