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

时间:2014-05-01 00:40:45

标签: 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 ???

我知道我可以伸手去做for($x=0;$x -lt $array.count;$x++),但我一直在寻找方括号的快捷方式。

3 个答案:

答案 0 :(得分:10)

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

$array[0..($array.length - 2)]

请记住先检查您的阵列中是否确实有两个以上的条目,否则您会发现自己在结果中遇到重复项。

这种副本的一个例子是:

@(1)[0..-1]

其中,从单个1的数组中提供以下输出

1 
1

答案 1 :(得分:2)

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

在PowerShell中,$array[0..-2]表达式的性质和范围运算符"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时需要考虑到这一点。

答案 2 :(得分:1)

在某些情况下,您正在处理列表,但是您不知道长度。选择对象具有-skiplast参数。

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

1
2
3