Дополнительная информация: повышение:: compressed_pair полезен, когда один из типов пары является пустой структурой. Это часто используется в шаблонном метапрограммировании, когда типы пары программно выведены из других типов. В тогда заканчиваются, у Вас обычно есть некоторая форма "пустой структуры".
я предпочел бы станд.:: пара для любого "нормального" использования, если Вы не в тяжелое шаблонное метапрограммирование.
Я не уверен, что это возможно с "автоматической" переменной. Вы всегда можете объявить один для себя и увеличить его:
$letters = { 'A', 'B', 'C' }
$letters | % {$counter = 0}{...;$counter++}
Или вместо этого используйте цикл для
...
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 (%) может иметь sciptblock Begin, который выполняется один раз. Мы устанавливаем здесь индексную переменную, а затем можем ссылаться на нее в блоке сценария процесса, где она увеличивается на единицу перед выходом из блока сценария.
0..($letters.count-1) | foreach { "Value: {0}, Index: {1}" -f $letters[$_],$_}