5

我有一大堆项目,我想从中提取项目。我需要从开始跳过一些项目,从结束跳过一些项目。

下面的例子被简化了。

我首先尝试提取边界元素:

> ("a", "b", "c", "d", "e")[1,-2]
b
d  

这按预期工作。

但是,当我尝试提取整个范围时,它返回的不是我想要的(与['a', 'b', 'c', 'd', 'e'][1:-1]运行良好的 Python 相比)。

> ("a", "b", "c", "d", "e")[1..-2]
b
a
e
d  

它以相反的方式循环。如何改变循环的方向?

我想得到:b c d

有没有不使用集合的实际长度的解决方案?

4

3 回答 3

5

1..-2 不会从第一个项目开始计算,直到最后两个项目。将数组保存到变量中,并通过计算数组长度减去末尾的项目来指定上限。

$a = "a", "b", "c", "d", "e"
$a[1..($a.length-2)]
于 2012-07-11T09:23:37.550 回答
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

这两个都b c没有明确使用长度属性返回。调整这两个参数以将输出调整到不同的范围。

于 2012-07-11T15:25:54.543 回答
1

要删除前两个,您可以这样做:

$null,$null,$a = "a", "b", "c", "d", "e"
于 2012-07-11T12:36:49.783 回答