将两个值与一个值进行存储的任何最佳方法 Id/Index

Any best way to store two vales against one Id/Index

在这里我只想得到本论坛专家的建议:

在 Poweshell 中,我有一个要求,我想针对一个索引存储两个不同的值。因为稍后我想针对唯一索引访问这两个值,就像在 Powershell 中那样:

at index 0 = [value1,valu2]
at index 1 = [value3,valu4]
at index 2 = [value5,valu6]

等等...

在 powershell 中执行此操作的最佳方法是什么?

数组由数字索引。该值可以是任何对象(包括另一个数组)。

$a = @(
    @('val1', 'val2') ,
    @(1234, 5678) ,
    @(321, 'val6')
)

$a[0][0]  # 'val1'
$a[0][1]  # 'val2'
$a[2][0]  # 321

要使用 .Add().Remove() 方法,请考虑一个 [hashtable](这个有数组作为值):

$a = @{
    0 = @('val1', 'val2')
    1 = @(1234, 5678)
    2 = @(321, 'val6')
}

$a.Add(3, @('valX','valY'))

$a[0][0]  # 'val1'
$a[0][1]  # 'val2'
$a[2][0]  # 321

值本身也可以是哈希表,如果您也想对它们使用这些方法的话。

为了完整起见,您还可以使用自定义 PowerShell 对象。我使用的是 briantist 使用的相同示例数据集。

$a = @(
    [pscustomobject]@{Index1 = 'val1';Index2 = 'val2'},
    [pscustomobject]@{Index1 = '1234';Index2 = '5678'},
    [pscustomobject]@{Index1 = '321';Index2 = 'val6'}
)

$a[2].Index1
321

这需要 3.0,但您可以轻松地将其更改为 2.0

如果您已经有了数组集合,那么您可以在循环中使用相同的逻辑

$a = @(
    @('val1', 'val2') ,
    @(1234, 5678) ,
    @(321, 'val6')
) | ForEach-Object{
    [pscustomobject]@{Index1 = $_[0];Index2 = $_[1]}
}