我有很多项目,我想从中提取项目。我需要从开始跳过一些项目,从结束跳过一些。
以下示例已简化。
我首先尝试提取边界元素:
> ("a", "b", "c", "d", "e")[1,-2]
b
d
这可以按预期工作。
然而,当我尝试提取整个范围时,它返回的东西比我想要的更多(与Python的['a', 'b', 'c', 'd', 'e'][1:-1]
相比,效果很好)。
> ("a", "b", "c", "d", "e")[1..-2]
b
a
e
d
它反过来循环。如何改变循环的方向?
我想得到:b c d
。
有没有使用集合的实际长度的解决方案?
答案 0 :(得分:5)
1 ..- 2将从第一项开始计算,直到最后两项。将数组保存到变量并通过计算数组长度减去末尾的项目来指定上限。
$a = "a", "b", "c", "d", "e"
$a[1..($a.length-2)]
答案 1 :(得分:3)
由于范围运算符不能满足您的要求,因此简单的管道可以完成手头的任务,但这可能会影响大型集合的性能。
从一个集合开始,以及从顶部和底部修剪的元素数量:
$a = "a", "b", "c", "d", "e"
($fromTop,$fromBottom) = 1, 2
使用此...
$a | select -skip $fromTop | select -skip $fromBottom -last 1000000
...或者,如果您安装了PSCX,这个更简洁优雅的序列:
$a | skip -first $fromTop -last $fromBottom
这两个都没有明确使用length属性返回b c
。调整两个参数以将输出调整到不同的范围。
答案 2 :(得分:1)
要删除前两个,你可以这样做:
$null,$null,$a = "a", "b", "c", "d", "e"