Ruby中类似于Python的"array[i:]"语法选取i后所有数组元素的方法是什么?

10

我发现自己需要像Python一样的东西

ary = [1,2,3,4,5,6,7,8]
ary[2:] #=> [3,4,5,6,7,8]

现今的时候这总是发生。

解决方案总是变得复杂而且难看。我想知道是否有更优雅的解决方案存在,因为我的解决方案不值得展示。


1
没什么区别:ary[2..-1] - Cary Swoveland
在范围中使用“-1”有些丑陋和神奇,特别是在这种情况下(例如(2..-1).each)不符合预期行为。 - Neil Slater
如果你想保留前 n 个元素,并且可以修改 arr,你可以使用 front = arr.shift(n)。一个不太理想的替代方案是 last(arr.size-n) 来实现 drop(n) 的功能。 - Cary Swoveland
请注意,Array#[]也称为Array#sliceary [2..-1]可写为 ary.slice(2..-1) - Cary Swoveland
2个回答

14

使用Array#drop

2.1.0 :019 > ary.drop(2)
 => [3, 4, 5, 6, 7, 8] 

1
这是最好的答案。它适用于所有Enumerable,甚至包括惰性枚举器](http://ruby-doc.org/core-2.1.1/Enumerator/Lazy.html#method-i-drop)。要执行相反的操作,有`take(n)`方法。还提供了`drop_while`和`take_while`方法。 - Matheus Moreira
1
的确,这是最好的。。:) - Arup Rakshit

10

你可以写:

ary[2..-1]
# => [3,4,5,6,7,8]

-1是数组中最后一个元素的索引,请查看Array#[]文档以获得更多信息。

Ruby中更好的选择是使用Array#drop方法:

ary.drop(2)
# => [3,4,5,6,7,8]

我曾经使用过 #drop 这个东西,但是用 -1 表示数组中的最后一个元素最终是最容易记住如何做这件事以及所有这类事情的各种排列组合方式。 - boulder_ruby

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接