获取PowerShell循环中当前项的索引

时间:2009-11-23 19:41:33

标签: powershell

鉴于PowerShell中的项目列表,如何在循环中找到当前项目的索引?

例如:

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

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

所有这一切的目标是我想使用Format-Table输出一个集合,并添加一个包含当前项目索引的初始列。通过这种方式,人们可以交互式地选择要选择的项目。

5 个答案:

答案 0 :(得分:53)

.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中引用它,然后在退出scriptblock之前它会增加。

答案 1 :(得分:37)

对于PowerShell 3.0及更高版本,内置了一个:)

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

答案 2 :(得分:31)

我不确定是否可以使用“自动”变量。您可以随时为自己声明一个并递增它:

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

或者使用for循环代替......

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

答案 3 :(得分:10)

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

答案 4 :(得分:-1)

对于像我一样从Google这里来的人,Powershell的更高版本具有$foreach自动变量。您可以使用$foreach.Current

找到“当前”对象