哈希表:使用上一个属性生成下一个属性

Hashtables: Use previous property to generate next property

提问人:ThePostMan 提问时间:10/31/2023 更新时间:10/31/2023 访问量:31

问:

有没有办法生成一个哈希表,该哈希表使用哈希表中刚刚定义的属性来创建下一个属性?我知道我可以一行一行地做,但我想保持我目前的格式,因为我喜欢它的阅读方式。

$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
PowerShell 哈希表

评论


答:

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

注意:

评论

0赞 ThePostMan 11/9/2023
对不起,我花了这么长时间才将其标记为答案。有时我会被某件事卡住,无法理解它,当我发现答案如此明显时,我急于完成我正在做的事情。这很有效,感谢您的回应!
0赞 mklement0 11/9/2023
很高兴听到它,@ThePostMan。不用担心延迟 - 我很感激你回来接受答案。