ChatGPT解决这个技术问题 Extra ChatGPT

将元素推送到数组开头的最简单方法是什么?

我想不出一种单一的方式来做到这一点。有办法吗?


m
mu is too short

使用 unshift 方法怎么样?

ary.unshift(obj, ...) → ary 在 self 前面添加对象,向上移动其他元素。

并在使用中:

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

我看了看,只是没有在快速扫描中看到它们。
@Ed:页面顶部的方法列表可以更好地格式化,很难直观地扫描。我找到它是因为我知道我正在寻找的方法名称 :)
如果您无法记住 shiftunshift 之间的哪些添加到数组中,哪些从数组中删除,请在脑海中从名称中删除一个“f”,您会得到一个非常清晰的图像方向。 (然后您必须记住,这些方法不适用于数组的“末端”。;)
@Phrogz 我多年来听过的最好的记忆技巧! :-)
@Phrogz 直到今天我仍在使用那个助记符,并且感觉很奇怪将它传递给其他人。
D
DaveMongoose

您可以使用 insert

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

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


J
John H
array = ["foo"]
array.unshift "bar"
array
=> ["bar", "foo"]

警告,这是破坏性的!


s
steenslag

从 Ruby 2.5.0 开始,Array 附带了 prepend 方法(它只是 unshift 方法的别名)。


这也适用于 ruby 2.4.4p296,所以也许只适用于 ruby 2.4?
m
ma11hew28

您还可以使用 array concatenation

a = [2, 3]
[1] + a
=> [1, 2, 3]

这会创建一个新数组并且不会修改原始数组。


a
akuhn

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

这是一个小脚本,

require 'methodsolver'

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

运行此打印

Found 1 methods
- Array#unshift

您可以使用安装methodsolver

gem install methodsolver

酷,没想到这样可以写LOL
irb> require 'methodsolver' 导致 LoadError: cannot load such file -- method_source from ... from /var/lib/gems/1.9.1/gems/methodsolver-0.0.4/lib/methodsolver.rb:2。红宝石 1.9.3p484,irb 0.9.6,Ubuntu 14。
尝试使用 pry 而不是 irb
W
Wilson Silva

您可以使用 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))