PowerShell 루프에서 현재 항목의 인덱스 가져오기
PowerShell의 항목 목록을 지정하면 루프 내에서 현재 항목의 인덱스를 찾으려면 어떻게 해야 합니까?
예를 들어 다음과 같습니다.
$letters = { 'A', 'B', 'C' }
$letters | % {
# Can I easily get the index of $_ here?
}
이 모든 것의 목적은 Format-Table을 사용하여 컬렉션을 출력하고 현재 항목의 인덱스가 포함된 첫 번째 열을 추가하는 것입니다.이렇게 하면 사람들은 대화식으로 선택할 항목을 선택할 수 있습니다.
.NET 에는, 이러한 종류의 기능을 사용하기 위한 편리한 유틸리티 방법이 몇개인가 준비되어 있습니다.어레이:
PS> $a = 'a','b','c'
PS> [array]::IndexOf($a, 'b')
1
PS> [array]::IndexOf($a, 'c')
2
위의 접근법에 대한 좋은 점들이 댓글에 있습니다.배열에서 항목의 인덱스를 "그냥" 찾는 것 외에 문제의 컨텍스트를 고려할 때 이것이 더 적합할 수 있습니다.
$letters = { 'A', 'B', 'C' }
$letters | % {$i=0} {"Value:$_ Index:$i"; $i++}
Forech(%)에는 Begin scipt block을 1회 실행할 수 있습니다.여기서 인덱스 변수를 설정하고 스크립트 블록을 종료하기 전에 증분되는 프로세스스크립트 블록에서 참조할 수 있습니다.
"자동" 변수로는 가능하지 않습니다.사용자는 언제든지 다음 중 하나를 선언하고 늘릴 수 있습니다.
$letters = { 'A', 'B', 'C' }
$letters | % {$counter = 0}{...;$counter++}
또는 a를 사용합니다.for
대신 루프...
for ($counter=0; $counter -lt $letters.Length; $counter++){...}
PowerShell 3.0 이후에는 내장되어 있습니다.
foreach ($item in $array) {
$array.IndexOf($item)
}
0..($letters.count-1) | foreach { "Value: {0}, Index: {1}" -f $letters[$_],$_}
Cedric Rup의 답변은 매우 도움이 되었습니다만, (나처럼) '%' 구문/에일리어스에 혼란스러우면, 여기에 확장되어 있습니다.
$letters = { 'A', 'B', 'C' }
$letters | ForEach-Object -Begin {$counter = 0} -Process {...;$counter++}
저처럼 구글에서 여기로 오는 사람들을 위해, 파워셸의 최신 버전은$foreach
자동 변수"현재" 오브젝트는 다음과 같이 찾을 수 있습니다.$foreach.Current
언급URL : https://stackoverflow.com/questions/1785474/get-index-of-current-item-in-a-powershell-loop
'programing' 카테고리의 다른 글
WPF 창이나 Windows 양식에 삽입할 수 있는 코드 에디터 아는 사람? (0) | 2023.04.20 |
---|---|
SQL Server Management Studio 대체 기능으로 테이블 참조/편집 및 쿼리 실행 가능 (0) | 2023.04.20 |
SQL Server에 200만 행 빠르게 삽입 (0) | 2023.04.15 |
Excel VBA를 사용하여 명령 프롬프트에서 명령 실행 (0) | 2023.04.15 |
pod install -pod: pod: 명령을 찾을 수 없습니다. (0) | 2023.04.15 |