Arrays PowerShell中从第一个到最后第二个的数组索引

Arrays PowerShell中从第一个到最后第二个的数组索引,arrays,powershell,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) bu

如何获取从第一个到第二个的数组元素范围

比如说,

$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 ???

我知道我可以为($x=0;$x-lt$array.count;$x++)进行长时间的搜索,但我正在寻找方括号快捷方式。

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

$array[0..($array.length - 2)]
请记住首先检查数组中是否有两个以上的条目,否则会发现结果中有重复项

此类副本的一个例子是:

@(1)[0..-1]
从单个
1
的数组中,它给出以下输出

1 
1

如前所述,这里的最佳解决方案是:
$array[0..($array.length-2)]

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

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


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

可能会出现这样的情况:您正在处理列表,但不知道列表的长度。选择对象具有-skiplast参数

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

1
2
3

你可以做
$array[0..($array.length-2)]
。不幸的是,罗伯特的建议是我所知道的最好的方法。我也希望$array[0..-2]的行为符合您的预期。但是不,它向后索引0->[len-1]->[len-2]。我真的不认为这有什么用处。@robert.westerlund您应该添加您的评论作为答案,这样我们就可以结束这个问题:)谢谢!遗憾的是,您可以使用负索引,但它没有在范围内实现;这是不自然和令人沮丧的。Ruby中的
[1,2,3,4][1..-1]
导致
[2,3,4]
<代码>@(1,2,3,4)[1..-1]
在Powershell中会导致
2,1,4
。Powershell中
-1
的问题不仅仅是重复。