2

我正在尝试动态填充哈希表。

创建空哈希表(这工作正常)

New-Variable -Name $summary_$count -Value @{}

现在添加到这个哈希表(这不起作用)

${summary_$count}.Add($name, $value)

问题是它没有读取 ${summary_$count} 作为我之前设置的变量名。只是为了澄清,这是通过一个柜台运行的,所以我最终会得到

$summary_01
$summary_02

等等等等

4

4 回答 4

4

尝试像这样创建变量:

New-Variable ${summary}_${count} -Value @{}

您可以看到 PowerShell 如何像这样解释您的原始文件:

Write-Host $summary_$count

如果您想稍后使用组成变量访问该变量的值,请像这样访问它:

$ht = Get-Variable ${summary}_${count}

或者只是使用 -PassThru 从新变量中获取它,例如:

$ht = New-Variable ${summary}_${count} -Value @{} -PassThru
$ht.Add($name, $value)

考虑到所有这些,尚不清楚为什么引用哈希表的变量需要动态命名。另一种方法是创建哈希表的哈希表,例如:

$ht = @{"${summary}_${count}" = @{}}
$ht["${summary}_${count}"].Add($name, $value)
于 2013-05-23T21:29:07.803 回答
0

Can you just have an array of hash tables? Or even better use [PSCustomObject] with 3 properties; name, value, and count. That's just me.

for($i=0;$i-lt100;$i++){
    $summary += @([PSCustomObject]@{Name=$name;Value=$value;Count=$i})
}
$summary | sort -property count

You do point out an interesting question.

foreach($count in (1..10)){
    New-Variable -Name "Summary_$count" -Value @{}
    #Now how do you access the variable you just created?
    #Check out Get-Help Set-Variable -Full
    Set-Variable -Name "Summary_$count" -Value @{$name,$count}
}
于 2013-05-24T09:15:37.893 回答
0

我的 2 美分:

PS C:\ps> $summary = "Summary"
PS C:\ps> $count = 1
PS C:\ps> $name = "John"
PS C:\ps> $value = 10
PS C:\ps> New-Variable -Name $summary`_$count -Value @{} # note the escaped underscore!
PS C:\ps> iex "`$$summary`_$count.add('$name',$value)"
PS C:\ps> $Summary_1

Name                           Value
----                           -----
John                           10

必须对下划线进行转义,以让 powershell 解析器知道第一个变量在哪里结束,第二个变量在哪里开始,否则它会尝试查找名为$summary_但没有找到它的变量

于 2013-05-24T12:49:31.303 回答
0

据我所知,您应该使用以下代码创建变量

New-Variable -Name "summary_$count" -Value @{}
于 2013-05-24T03:09:50.973 回答