programing

PowerShell 루프에서 현재 항목의 인덱스 가져오기

javamemo 2023. 4. 20. 19:37
반응형

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

반응형