powershell哈希表操作

时间:2015-07-24 09:55:54

标签: powershell hashtable

有人可以解释一下,为什么我们在使用哈希表时会有不同的行为?

实际上,当值是简单类型(整数,字符串...)或对象类型时,行为是不同的。当我们使用简单类型时,我们会影响变量的值并更新它;这不会更新哈希表。但是当我们使用对象类型时,我们会影响变量的值并更新它;这将更新哈希表。

使用示例^^会更容易理解。

简单类型:

$hash=@{
    a=1
    b=2
}
$variable = $hash['a']
$variable = 3

Result: $hash
Name                           Value
----                           -----
a                              1
b                              2

对象类型:

$hash=@{
    a=New-Object PSObject -Property @{ obj=1 }
    b=New-Object PSObject -Property @{ obj=2 }
}
$variable = $hash['a']
$variable.obj = 3

Result: $hash
Name                           Value
----                           -----
a                              @{obj=3}
b                              @{obj=2}

1 个答案:

答案 0 :(得分:7)

这是因为您使用reference typesvalue types

对象类型:

$variable = $hash['a']
$variable.obj = 3

在此处检索对象引用,然后访问对象内的属性。

简单类型:

$variable = $hash['a']
$variable = 3

在这里,您将整个int复制到一个新变量。因此,当更新变量时,它会独立更新,而不会影响哈希表。 要更新哈希表的值,您必须使用$hash['a'] = 3

结帐difference between reference types and values types

编辑:string是特殊的,因为它使用引用保存在堆中,但它的行为类似于值类型。因此,在分配给新字符串时它会被复制,其行为类似于int示例。