
숫자 목록이 있는데, 일부는 순차적이고 일부는 구분 기호가 있습니다. 여기에 예가 있습니다.
(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 {$_})