
我有一個數字列表,有些是連續的,有些是有中斷的。這是一個例子。
(1..10),12,15,(30..45),50,53
當我嘗試查詢“我的號碼”是否在此列表中時(假設是)4
,所有檢查都會失敗。
> 4 -in (1..10),12,15,(30..45),50,53
> False
> (1..10),12,15,(30..45),50,53 -contains 4
> False
> ((1..10),12,15,(30..45),50,53).contains(4)
> False
> (1..10),12,15,(30..45),50,53
> 1
2
3
4
etc...
我究竟做錯了什麼?
答案1
Powershell 使用逗號的預設行為是建立陣列的陣列:
(1..10),12,15,(30..45),50,53 | Foreach {$_ -join ' '}
1 2 3 4 5 6 7 8 9 10
12
15
30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45
50
53
4
不等於1 2 3 4...
,因此比較結果為 false。
獲取所需內容的簡單方法是表達$()
用分號而不是逗號分隔的清單元素,例如:
$((1..10);12;15;(30..45);50;53) -contains 4
True
類似的關鍵字正在展開或展平清單/數組
答案2
謝謝傑夫·澤特林。解決方案是“展平”數組。就我而言,最簡單且最相容的方法是將輸出通過管道傳輸到然後write-output
進行檢查。
> ((1..10),12,15,(30..45),50,53 | write-output) -contains 4
> True
答案3
有一個簡單的語法可以將陣列集合展平為一個陣列:
4 -in @((1..10),12,15,(30..45),50,53 | ForEach-Object {$_})