Получите индекс текущего объекта в цикле PowerShell

Дополнительная информация: повышение:: compressed_pair полезен, когда один из типов пары является пустой структурой. Это часто используется в шаблонном метапрограммировании, когда типы пары программно выведены из других типов. В тогда заканчиваются, у Вас обычно есть некоторая форма "пустой структуры".

я предпочел бы станд.:: пара для любого "нормального" использования, если Вы не в тяжелое шаблонное метапрограммирование.

59
задан Peter Mortensen 22 April 2019 в 13:41
поделиться

3 ответа

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

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

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

for ($counter=0; $counter -lt $letters.Length; $counter++){...}
40
ответ дан 24 November 2019 в 18:09
поделиться

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

59
ответ дан 24 November 2019 в 18:09
поделиться
0..($letters.count-1) | foreach { "Value: {0}, Index: {1}" -f $letters[$_],$_}
11
ответ дан 24 November 2019 в 18:09
поделиться
Другие вопросы по тегам:

Похожие вопросы: