Подтвердить что ты не робот

Получить индекс текущего элемента в петле Powershell?

Учитывая список элементов в powershell, как мне найти индекс текущего элемента из цикла?

Например:

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

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

Цель всего этого заключается в том, что я хочу вывести коллекцию с помощью Format-Table и добавить начальный столбец с индексом текущего элемента. Таким образом, люди могут в интерактивном режиме выбрать элемент для выбора.

4b9b3361

Ответ 1

Не уверен, что это возможно с помощью "автоматической" переменной. Вы всегда можете объявить один для себя и увеличивать его

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

или используйте цикл for вместо этого...

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

Ответ 2

У .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, который выполняется один раз. Мы устанавливаем здесь индексную переменную, а затем можем ссылаться на нее в скриптовом блоке процесса, где он увеличивается до выхода из скриптового блока.

Ответ 3

Существует один встроенный:)

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

Ответ 4

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