2015-11-13 70 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