将两个vales存储为一个Id / Index

时间:2016-02-29 16:53:24

标签: powershell indexing collections key-value

我想在这个论坛上得到专家的建议:

在Poweshell中,我有一个要求,我想在一个索引上存储两个不同的值。因为后来我想根据Powershell中的唯一索引来访问这两个值:

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

依旧......

在PowerShell中可以做到的最佳方法是什么?

2 个答案:

答案 0 :(得分:1)

数组按编号索引。值可以是任何对象(包括另一个数组)。

$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

如果你想在它们上面使用方法,那么值本身也可以是哈希表。

答案 1 :(得分:1)

为了完整起见,您还可以使用自定义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]}
}