在PowerShell中创建成对的字符串值的列表

AJe*_*gs1 5 powershell hashtable list

对于我正在做的项目,我需要检查并查看文件中的一行中是否存在一对字符串。

我试图使用像这样的哈希表:

$makes = 'Ferrari', 'Ford', 'VW', 'Peugeot', 'Subaru'
$models = 'Enzo', 'Focus', 'Golf', '206', 'Impreza'

$table = @{}

for ($i = 0; $i -lt $makes.Length; $i++)
{
    $table.Add($makes[$i], $models[$i])
}
Run Code Online (Sandbox Code Playgroud)

在我尝试插入重复的品牌之前,此方法效果很好。我很快发现哈希表不接受重复项。

那么有没有办法在PowerShell中创建字符串的双重列表?在C#中非常容易做到,但是我发现在PowerShell中无法实现。

gms*_*man 5

对您的代码和逻辑进行最少的更改:

$makes = 'Ferrari', 'Ford', 'VW', 'Peugeot', 'Subaru'
$models = 'Enzo', 'Focus', 'Golf', '206', 'Impreza'

for ($i = 0; $i -lt $makes.Length; $i++){
    [array]$cars += New-Object psobject -Property @{
        make  = $makes[$i]
        model = $models[$i]

    }
}
Run Code Online (Sandbox Code Playgroud)

这使用 custom psobject,转换为数组,以便+=允许。


Sea*_*ean 5

您可以使用 aPSCustomObject并直接填充列表:

$cars = @(
    [pscustomobject]@{make = "Ferrari"; model="Enzo"}
    [pscustomobject]@{make = "Ford"; model="Focus"}
    [pscustomobject]@{make = "Peugeot"; model="206"}
    [pscustomobject]@{make = "Subaru"; model="Imprezza"}
)
Run Code Online (Sandbox Code Playgroud)

  • 如果我删除“[pscustomobject]”部分,会有什么不同?PS5下的效果显然是一样的。谢谢。 (2认同)