powershell数组索引从第一个到第二个

RM1*_*358 12 arrays powershell

如何获得第一个到第二个的数组元素范围?例如

$array = 1,2,3,4,5
$array[0] - will give me the first (1)
$array[-2] - will give me the second last (4)
$array[0..2] - will give me first to third (1,2,3)
$array[0..-2] - I'm expecting to get first to second last (1,2,3,4) but I get 1,5,4 ???
Run Code Online (Sandbox Code Playgroud)

我知道我可以做很长的事情,for($x=0;$x -lt $array.count;$x++)但我正在寻找方括号的快捷方式.

Rob*_*und 12

您只需要计算结束索引,如下所示:

$array[0..($array.length - 2)]
Run Code Online (Sandbox Code Playgroud)

请记住先检查您的数组中是否确实有两个以上的条目,否则您会发现自己在结果中出现了重复项.

这种副本的一个例子是:

@(1)[0..-1]
Run Code Online (Sandbox Code Playgroud)

其中,从单个数组中1给出以下输出

1 
1
Run Code Online (Sandbox Code Playgroud)


js2*_*010 10

可能存在这样的情况:您正在处理列表,但您不知道长度。Select-object 有一个 -skiplast 参数。

(1,2,3,4,5 | select -skiplast 2)

1
2
3
Run Code Online (Sandbox Code Playgroud)


Fam*_*ake 6

正如前面提到的,最好的解决方案是: $array[0..($array.length - 2)]

您遇到的问题可以用PowerShell 中的表达式和范围运算符$array[0..-2]的性质来解释。如果您尝试在 PowerShell 中仅评估这一部分,您将看到结果将是一个从 0 到 -2 的数字数组。"0..-2""..""0..-2"

>> 0..-2
0
-1
-2
Run Code Online (Sandbox Code Playgroud)

当您尝试$array[0..-2]在 PowerShell 中执行操作时,这与执行$array[0,-1,-2]. 这就是为什么你得到的结果是 as1, 5, 4而不是1, 2, 3, 4。

一开始这可能有点违反直觉,特别是如果您有一些 Python 或 Ruby 背景,但在使用 PowerShell 时需要考虑到这一点。