假設我有一對數組:如何獲得一個空列表而不是null?
$a = 1,2,3
$b = 4,5,6
和我得到的交集(空):
$c = $a |?{$b -contains $_}
我希望$c
包含空列表,這樣我可以這樣做:
$c.length
但我沒有。我得到一個$null
(當查詢.length
時發出異常)。我怎樣才能得到一個空的列表呢?
假設我有一對數組:如何獲得一個空列表而不是null?
$a = 1,2,3
$b = 4,5,6
和我得到的交集(空):
$c = $a |?{$b -contains $_}
我希望$c
包含空列表,這樣我可以這樣做:
$c.length
但我沒有。我得到一個$null
(當查詢.length
時發出異常)。我怎樣才能得到一個空的列表呢?
敷在數組構造:
$c = @($a | ? { $b -contains $_ })
我希望$ C爲包含一個空列表
你不應該指望即使列表爲空,它也不是一個總是建立列表的Python式列表理解。
這是一個通過管道放置對象,通過過濾器測試,並存儲管道輸出。如果沒有任何東西通過過濾器,則沒有輸出存儲。管道不會從空中變出一個空陣列 - 這會引起誤導和煩人。這是關於數組構造函數的答案的地方 - 與@(...)
包裝在一起構建一個數組,輸出流水線作爲內容,沒有輸出意味着一個空數組。
而您冒險使用.Length
而不是.Count
。例如如果你這樣做有字符串,那麼沒有什麼交集將不會返回任何長度,兩個項目的交集將返回2,但是一個項目的交集將返回字符串的長度:
$a = 'abc','cde','def'
$b = 'ghi','jkl','def'
$c = $a |?{$b -contains $_} #c = 'def'
$c.length # 1 item, length 3
這不是一個問題是如果您使用的是沒有長度屬性的數字,但我認爲習慣性地使用.Count
來獲取集合中的項目數量是個好主意。
另請參閱此答案:https://stackoverflow.com/a/26513523/478656有關長度與計數屬性的相關討論,以及它們在PSv3 +中如何更改以使空工作更容易。
這讓我想起你的要求:
我得到了
$null
(哪些問題當查詢.length
除外)
它......不?
($null).Length # $null in PSv2, 0 in PSv4, PSv5.1. No exception.
除非你在'嚴格'模式下運行?
$ null.Length返回0與PowerShell 5 –
什麼是您的PowerShell版本? – Matt
我測試的代碼運行在4.0 – ekkis