如何在Ruby中向数组前面添加元素?

37

在 Ruby 中,在数组前面添加元素的最佳方法是什么? 或许类似于 Python 的 list.insert(0, 'foo')

我想要在 Ruby 数组的 0 位置添加一个元素,并使所有其他元素向右移动。


@HithamS.AlQadheeb:你会对每个可能是重复问题的提问进行投反对票吗?只需告知提问者即可。 - peter
2
不。我投了反对票,因为这个问题显示出很差的研究努力。 - Sully
为什么不立即通知他,而是立刻制裁,却不知道导致它的原因呢? - peter
3个回答

84
array = ['b', 'c']

array.unshift('a')

p array
=> ['a', 'b', 'c']

正如 Scott G 在评论中指出的那样,从 Ruby 2.5.0 开始,#prepend 已被添加为 #unshift 的别名。


1
http://www.ruby-doc.org/core-2.1.2/Array.html#method-i-unshift - hirolau
1
我认为应该提到的是,从 Ruby 2.5.0 开始,方法 prepend 已作为 unshift 的别名添加进来。个人而言,我更喜欢在我的代码中使用 prepend 来提高可读性,因为它是更常见的术语,并且从技术角度来描述正在发生的事情仍然足够准确。 - Scott G
1
我个人更喜欢使用 unshift 而不是 prepend,原因如下:1)与 shift 对称;2)有趣的助记符(为了记住 shiftunshift 哪个做什么,从名称中删除字母“f”)。 - Sergio Tulentsev
1
@SergioTulentsev 我也用同样的记忆法!也许几年前是从你那里学来的。 :) - SteveTurczyn
@SteveTurczyn:哈哈,那是可能的 :) - Sergio Tulentsev

6

除了Steve的答案,还有另一种方法

array = ['b', 'c']
array = ['a'] + array #["a", "b", "c"]

4
为了完整性:这两个答案之间有一个区别。这个答案将创建一个新的数组,而Steve的答案将修改现有的数组。如果它被多个变量引用,这可能是一个巨大的区别。 - BroiSatse
你是对的,但在大多数情况下这并不重要,而且更易读。 - peter

5
array = ["b", "c"]
array.insert(0, "a", "a") # => ["a", "a", "b", "c"]

3
这会引发一个“ArgumentError”错误,你可能想要使用insert(0, "a", "a") - toro2k
此外,您可以使用展开运算符将数组拆分并在前面添加。因此,other_array = ['a', 'a']; array.insert(0, *other_array) 也会产生相同的效果。 - Joseph

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