2015-11-13 57 views
2

我有一个数组,其中每个元素都是哈希表。每个散列表都有相同的密钥。它是:从哈希表数组的键创建数组

@(
    @{"MarketShortCode"="abc";"MarketName"="Market1" }, 
    @{"MarketShortCode"="def";"MarketName"="Market2" }, 
    @{"MarketShortCode"="ghi";"MarketName"="Market3" }, 
    @{"MarketShortCode"="jkl";"MarketName"="Market4" } 
) 

我想要一个很好的优雅的方式来提取一个只包含MarketShortCode键值的数组。所以,我想这一点:

@("abc","def","ghi","jkl") 

这是我想出来的最好的:

$arr = @() 
$hash | %{$arr += $_.MarketShortCode} 
$arr 

但我不喜欢这样的余弦其三行代码。感觉像我应该能够在一行代码中完成的事情。有没有办法?

回答

2

只是这样做:

$hash | %{$_.MarketShortCode} 

也就是说,从块返回,而不是将它添加到一个数组,然后解除引用数组的值。

如果您使用PowerShell的3+,还有的甚至更短的方式:

$hash.MarketShortCode 

PowerShell的自动应用点.在当它使用这样的阵列中的每个项目,但它不支持,直到V3 。

+0

容易,因为呃!谢谢@ briantist。显然,我必须等待9分钟才能将其标记为答案。 – jamiet

+0

(这相当主观但是)我真的更喜欢'$ hash | %{$ _ ['MarketShortCode']}'在“属性”类型参考('$ _。MarketShortCode') - 后者不明确,'[“key”]'不是 –

+0

@ MathiasR.Jessen我更喜欢当属性名称要在脚本中进行硬编码时使用点符号,以及在运行时生成或选择名称时使用括号的项目符号(可能不是正确的术语)。 – briantist