获取Powershell循环中当前项目的索引?
给出powershell中的项目列表,我如何从循环内找到当前项目的索引?获取Powershell循环中当前项目的索引?
例如:
$letters = { 'A', 'B', 'C' }
$letters | % {
# Can I easily get the index of $_ here?
}
所有这一切的目标是,我想使用的输出格式表的集合,并且与当前项目的索引添加初始列。这样人们可以交互式地选择一个项目来选择。
不确定这是可能的“自动”变量。 您可以随时申报一个为自己和增加它
$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(%)可以有一个开始sciptblock执行一次。我们在那里设置一个索引变量,然后我们可以在进程脚本块中引用它,在退出脚本块之前它会增加。
如果数组包含重复项,则可能有问题... – 2009-11-24 06:55:06
不要在迭代这些项目时查找数组项目的每个索引。这将是每个项目的线性搜索;听起来像做一个迭代O(n^2):-) – Joey 2009-11-24 07:39:07
0..($letters.count-1) | foreach { "Value: {0}, Index: {1}" -f $letters[$_],$_}
这是足够干净的,但它太糟糕了没有直接的方法,不涉及搜索数组中的索引。 – 2010-12-10 20:38:22
有一个内置的:)
foreach ($item in $array) {
$array.IndexOf($item)
}
可能这是一个比2009年使用的PS更新的版本,否则这应该是现在接受的答案。 – 2015-09-13 12:55:59
你是完全正确的。在PowerShell 2.0推出一个月后,原来的问题被问到,并且在PowerShell 3.0中添加了IndexOf。 – 2015-09-14 00:19:09
这是查找匹配数组中每个项目的第一个项目的索引,而不是迭代索引值。这比较慢,如果数组包含重复的项目,您将得到错误的索引。 – mdonoughe 2017-04-30 19:51:19
实施例:'> “A,B,C,d,E,F,G” -split “” | %{$ i = 0} {if($ i -gt 3){$ _}; ++ $ i}'输出:'E F G' – Andrew 2017-10-28 03:23:52
当我不得不使用计数器重命名文件时, %{$ i = 46} {move-item $ _(“ARM- {0:00000} .pdf”-f $ i ++)}' – Sung 2017-12-15 20:22:17