如何获得第一个到第二个的数组元素范围?
例如,
$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++)
,但我一直在寻找方括号的快捷方式。
答案 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