code

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

codestyles 2020. 12. 27. 10:54
반응형

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


PowerShell의 항목 목록이 주어지면 루프 내에서 현재 항목의 인덱스를 어떻게 찾습니까?

예를 들면 :

$letters = { 'A', 'B', 'C' }

$letters | % {
  # Can I easily get the index of $_ here?
}

이 모든 것의 목표는 Format-Table을 사용하여 컬렉션을 출력 하고 현재 항목의 인덱스가있는 초기 열을 추가하려는 것입니다. 이렇게하면 사람들이 선택할 항목을 대화식으로 선택할 수 있습니다.


"자동"변수를 사용할 수 있는지 잘 모르겠습니다. 언제든지 직접 선언하고 증분 할 수 있습니다.

$letters = { 'A', 'B', 'C' }
$letters | % {$counter = 0}{...;$counter++}

또는 for대신 루프를 사용하십시오 ...

for ($counter=0; $counter -lt $letters.Length; $counter++){...}

.NET에는 System.Array에 이러한 종류의 유용한 유틸리티 메서드가 있습니다.

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++}

Foreach (%)는 한 번 실행되는 Begin sciptblock을 가질 수 있습니다. 여기서 인덱스 변수를 설정 한 다음 스크립트 블록을 종료하기 전에 증가하는 프로세스 scripblock에서 참조 할 수 있습니다.


PowerShell 3.0 이상의 경우 기본 제공됩니다. :)

foreach ($item in $array) {
    $array.IndexOf($item)
}

0..($letters.count-1) | foreach { "Value: {0}, Index: {1}" -f $letters[$_],$_}

참조 URL : https://stackoverflow.com/questions/1785474/get-index-of-current-item-in-a-powershell-loop

반응형