arrays - 如何使用 Powershell 简化多维数组?

标签 arrays powershell multidimensional-array pscustomobject

我想在powershell中创建多维数组,我尝试过这种方式并且它有效,但我想简化它以使其没有重复 namepn。哪位大神可以给点意见,万分感谢

$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/

相关文章:

c - 二维数组的动态内存分配 (C)

javascript - 如何对两个多维数组的元素求和?

从 float 到 char 数组的转换

python - 插入排序实现不正确,还是时间复杂度理解不正确?

c# - 如何在数组中找到最大值

R:将数组转换为一行矩阵

.net - PowerShell调用命令行

azure - Azure 点到站点 VPN 下载中缺少 VpnClientSetupAMD64.exe

powershell - 将 PowerShell cmdlet 的错误级别传递到批处理文件

C++ 包含字符串和整数的二维数组