【发布时间】:2015-04-12 04:04:29
【问题描述】:
Powershell 的数组表示法在对数组末尾进行切片时具有相当奇怪的行为,尽管已记录在案。来自the official documentation 的这一部分很好地总结了这种奇异性:
负数从数组末尾开始计数。例如,“-1” 指的是数组的最后一个元素。显示最后三个 数组元素,类型:
$a[-3..-1]但是,使用这种表示法时要小心。
$a[0..-2]这个命令并不引用数组的所有元素,除了 最后一个。它指的是第一个、最后一个和倒数第二个 数组中的元素。
下面的代码证实了这个离奇:
$a = 0,1,2,3
$a[1..-1]
这确实输出了这个奇怪的结果:
1
0
3
所以,问题是,是用一个相对于数组的开头和另一个相对于数组结尾的索引进行切片的惯用方式?
请告诉我这比这个丑陋的烂摊子更好:
$a[1..($a.Count-1)]
编辑:
描述我正在寻找的另一种方式是:这个 Python 表达式的惯用 Powershell 等效项:
a=1,2,3,4
a[1:-1]
当然,计算结果为(2,3)
【问题讨论】:
-
我相信一个人认为奇怪或奇怪的东西在另一个人看来可能完全正常。举个例子,我通读了你的 sn-ps 没有阅读你的理由——只是为了看看我如何自然地解释表达式——而 Powershell 的行为方式似乎与我的预期一致。只是说 - 意见会有所不同。总是。
-
@amn 您的评论也促使我重新阅读。事实上,PowerShell 的行为方式与我现在所期望的一致。显然,即使我与五年前的我不同,我的看法也不同。
-
我想我知道你的感受。 Powershell 解析器一个接一个地向我投掷曲线球,好像在告诉我我永远不会理解 Powershell 的工作原理,但至少我打败了它,或者感觉如此。还有一些我有点不确定的怪癖——数组文字(是的,我读过this piece),举个例子——但解析器似乎或多或少地被消化了。是的,老观点——哎呀,我经常对我之前的问题、答案和 cmets 感到畏缩:/ 希望这不会是其中之一!
-
我同意旧 OP,这不是切片运算符,这是一个奇怪的结果。但不像以前的我,我知道“..”是一个范围生成器,所以它确实有意义。我只是对 Powershell 没有数组切片运算符感到失望。
标签: arrays powershell slice idioms language-comparisons