PowerShell - 비순차 범위의 숫자 확인 실패

PowerShell - 비순차 범위의 숫자 확인 실패

숫자 목록이 있는데, 일부는 순차적이고 일부는 구분 기호가 있습니다. 여기에 예가 있습니다.
(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...비교가 거짓입니다.


$()다음과 같이 쉼표 대신 세미콜론으로 구분된 목록 요소를 표현하여 찾고 있는 내용을 얻는 간단한 방법 중 하나입니다 .

$((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 {$_})

관련 정보