将一个元素推入数组开头的最简单方法是什么?

237

我想不出一种一行代码解决这个问题的方法。有其他办法吗?

7个回答

443

可以尝试使用 unshift 方法。

ary.unshift(obj, ...) → ary
将对象添加到 self 的前面,移动其他元素。

用法示例:

a = [ 0, 1, 2]
a.unshift('x')
# => ["x", 0, 1, 2]
a.inspect
# => "["x", 0, 1, 2]"

1
我看了一下,只是在快速浏览中没有看到它们。 - Ed S.
1
@Ed:页面顶部的方法列表可以更好地格式化,目前它很难在视觉上扫描。我之所以找到它,是因为我知道我要查找的方法名称 :) - mu is too short
154
如果你在记住shiftunshift的区别上有困难,不知道哪个是向数组添加元素,哪个是从数组中删除元素,可以在心理上将它们的名称中的“f”去掉,这样就能非常清晰地看出它们的方向了。(然后你还需要记住这些方法不能在数组的“末尾”使用。;) - Phrogz
4
@Phrogz提出的是我多年听到的最好的助记技巧! :-) - konung
3
@Phrogz 我至今仍在使用那个记忆口诀,将它传授给其他人时感觉很奇怪。 - François F
显示剩余6条评论

58

您可以使用insert

a = [1,2,3]
a.insert(0,'x')
=> ['x',1,2,3]

第一个参数是要插入的索引位置,第二个参数是要插入的值。


26
array = ["foo"]
array.unshift "bar"
array
=> ["bar", "foo"]

注意,它会造成破坏!


25

自 Ruby 2.5.0 版本开始,Array 类中新增了 prepend 方法(该方法是 unshift 方法的别名)。


2
这也适用于ruby 2.4.4p296,所以可能只适用于ruby 2.4? - Obromios

18
您也可以使用数组连接:array concatenation
a = [2, 3]
[1] + a
=> [1, 2, 3]

这将创建一个新的数组,不会修改原始数组。


似乎这是最有效的方法。 - Tanmay Jain

10

您可以使用methodsolver来查找Ruby函数。

这是一个小脚本,

require 'methodsolver'

solve { a = [1,2,3]; a.____(0) == [0,1,2,3] }

运行此代码将会打印出:

Found 1 methods
- Array#unshift

您可以使用以下方法安装 methodsolver:

gem install methodsolver

酷,没想到这个是可以写的哈哈。 - Marko Avlijaš
在 Ruby 1.9.3p484、irb 0.9.6、Ubuntu 14 上执行 irb> require 'methodsolver' 会导致 LoadError: cannot load such file -- method_source 错误,错误来源为 /var/lib/gems/1.9.1/gems/methodsolver-0.0.4/lib/methodsolver.rb:2 - Camille Goudeseune
1
尝试使用 pry 而不是 irb - akuhn

2
您可以使用prependdelete的组合,这两者都是惯用语并且表达意图清晰:
array.delete(value)  # Remove the value from the array  
array.prepend(value) # Add the value to the beginning of the array

或者在一行中:

array.prepend(array.delete(value))

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