Ruby移除数组中的第一个元素

6
我有一个数组。我需要保留除索引为0的元素以外的所有内容。我已经编程了一整天,现在我的大脑已经崩溃了。如果能提供任何帮助,那将是非常棒的。谢谢!
4个回答

15

使用Array#shift方法,它恰好可以实现你想要的功能:

a = [1, 2, 3]
a.shift # => 1
a # => [2, 3]

我本来以为我已经尝试过了。看起来很简单。我一定是打错了什么字母或者其他的什么。谢谢。 - Jaron Bradley
4
为了帮助你记住shiftunshift是用于从数组中删除元素的,可以使用一个有趣(粗俗)的提示法,尝试从名称中删除“f”字母。 :) - Phrogz
1
最好的记忆法是粗俗的。越是丑闻轰动,它就越能在你的脑海中牢记。 - Camille Goudeseune

9
你可以使用数组索引切片:
```python ```
some_array[1..-1]

或者,如果您想永久修改一个变量,可以这样做:
some_array = [1,2,3,4]
some_array.delete_at(0)
# => 1
some_array
# => [2,3,4]

1

根据结果的用途(一个删除了第一个元素的数组),获取结果的方式有不同的方法,而如何使用它可能会影响选择。

一种方法是通过应用方法将原始数组更改为删除第一个元素的新数组,忽略该方法的结果,并由于应用方法的副作用实现所需的结果。 OP接受了执行此操作的答案(这意味着在他的情况下它有效):

a = [ "a", "b", "c" ]
a.shift #=> "a"
a #=> ["b", "c"]

如果你想保留结果数组,那么这样做很好,但如果你需要在现有方法链的中间插入一些方法以“摆脱第一个数组元素”,那么就不太适用。但在我的情况下,我有一个数组,其中第一个元素是由系统命令生成的标题行,后面跟着该命令的几行输出,每行一个数组元素,并且当我修改这些行以达到所需的结果时,我意识到需要删除标题行,因为它与其余行的形式不同,无法正确处理且不需要。我的原始代码行看起来像这样(再次提醒,a 是数组):
puts a.method1.method2.method3.method4

我想要做这件事:

puts a.method1.method2.removeFirstElement.method3.method4

在另一个答案中,展示了使用slice的方法,虽然没有明确说明它在某些情况下如何比被接受的答案更好:

puts a.method1.method2.slice(1..-1).method3.method4

如果我使用了被接受的答案,我需要做这样的事情:
temp = a.method1.method2
temp.shift
puts temp.method3.method4

除了需要修改原始代码结构(虽然根据所做的事情而言,这有利有弊),还需要创建一个新的临时对象('temp')才能得到结果。
知道我们将要去哪里往往会对如何到达那里产生明确的影响。
(我注意到,我几乎更喜欢使用slice!(0)来代替shift,以实际改变数组,因为感叹号清楚地表明了数组正在被改变;shift方法不符合当前建议,在会改变对象的方法中添加感叹号。但是,我可能仍然会使用shift来避免混乱的(0)。)

1

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