提问人:ThePostMan 提问时间:10/31/2023 更新时间:10/31/2023 访问量:31
哈希表:使用上一个属性生成下一个属性
Hashtables: Use previous property to generate next property
问:
有没有办法生成一个哈希表,该哈希表使用哈希表中刚刚定义的属性来创建下一个属性?我知道我可以一行一行地做,但我想保持我目前的格式,因为我喜欢它的阅读方式。
$RequestedSpace = @{}
$RequestedSpace.Clear()
$RequestedSpace = @{
Gb = (Read-Host "How much space (in Gb) would you like left over?")
b = $RequestedSpace.Gb * 1Gb
};
$RequestedSpace.Gb
$RequestedSpace.b
上述结果是 $RequestedSpace.b 的 null 值
下面有效,但明显更丑陋 IMO
$RequestedSpace = @{}
$RequestedSpace.Clear()
$RequestedSpace.Gb = Read-Host "How much space (in Gb) would you like left over?"
$RequestedSpace.b = [bigint]$RequestedSpace.Gb * 1gb
答:
3赞
mklement0
10/31/2023
#1
您可以利用以下事实:
您可以定义一个辅助变量,并将赋值用作表达式,方法是将其包含在 中,分组运算符将赋值传递给
(...)
条目是按顺序定义的,因此后续条目可以引用之前定义的辅助变量。
@{
# Note the *definition* of aux. variable $gb
Gb = ($gb = [double] (Read-Host "How much space (in Gb) would you like left over?"))
# Note the *use* of $gb
b = $gb * 1Gb
}
假设您在出现提示时输入,您将获得以下显示输出:2
Name Value
---- -----
Gb 2
b 2147483648
注意:
该技术适用于哈希表文本,如上所示 () 以及
[pscustomobject]
文本 ()。@{ ... }
[pscustomobject] @{ ... }
GitHub 建议 #13782 寻找一种内置方法来允许哈希表条目相互引用。
评论
0赞
ThePostMan
11/9/2023
对不起,我花了这么长时间才将其标记为答案。有时我会被某件事卡住,无法理解它,当我发现答案如此明显时,我急于完成我正在做的事情。这很有效,感谢您的回应!
0赞
mklement0
11/9/2023
很高兴听到它,@ThePostMan。不用担心延迟 - 我很感激你回来接受答案。
评论