你好,我是初学者,我需要比较两个哈希表并重新生成另一个。
例如:
[hashtable]$alpha =@{
"A1" = "computer";
"A2" = "folder";
"A3" = "plane";
"A4" = "flower";
"A5" = "dog";
}
[hashtable]$beta =@{
"computer" = "P1";
"plane" = "P2";
"garden" = "p3";
"flower" = "P4";
"dog" = "P5";
}
如果我在$alpha
和$beta
中有计算机,则需要为用户A1编写P1
如果我在$alpha
和$beta
中有飞机,我需要为用户A3写P2
我需要使用每个吗?
谢谢!
答案 0 :(得分:1)
@PetSerAl和@LotPings已经提供了该解决方案,并且是以下解决方案之一
$alpha.GetEnumerator() | select Key, @{ n='Value'; e={$beta[$_.Value]} }
$alpha.GetEnumerator() | %{[PSCustomObject]@{aKey=$_.Key;aValue=$_.Value;bValue=$beta[$_.Value]}}
让我解释一下那里到底发生了什么。
首先,当您使用哈希表时,无法使用Select-Object
之类的cmdlet直接操作它们。为此,您需要在其上使用GetEnumerator()
方法。现在您可以将其传送到Select-Object
。
要使用另一个哈希表中的值,必须使用计算属性而不是标准属性。它的语法是:
@{ n='name'; e={ expression to be executed }
让我们进一步研究这个表达式$beta[$_.Value]
。 $_
代表发送到管道的对象,因此$_.Value
是其值(您知道哈希表具有键名和值)。为了更好地了解此表达式及其结果
PS C:\> $alpha.GetEnumerator() | select -Last 1
Name Value
---- -----
A5 dog
对于此条目,$_.Value
为dog
,因此$beta[$_.Value]
的值为$beta["dog"]
,其值为:
PS C:\> $beta["dog"]
P5
其他资源: