What about using the unshift
method?
ary.unshift(obj, ...) → ary Prepends objects to the front of self, moving other elements upwards.
And in use:
irb>> a = [ 0, 1, 2]
=> [0, 1, 2]
irb>> a.unshift('x')
=> ["x", 0, 1, 2]
irb>> a.inspect
=> "["x", 0, 1, 2]"
You can use insert
:
a = [1,2,3]
a.insert(0,'x')
=> ['x',1,2,3]
Where the first argument is the index to insert at and the second is the value.
array = ["foo"]
array.unshift "bar"
array
=> ["bar", "foo"]
be warned, it's destructive!
Since Ruby 2.5.0, Array ships with the prepend
method (which is just an alias for the unshift
method).
You can also use array concatenation:
a = [2, 3]
[1] + a
=> [1, 2, 3]
This creates a new array and doesn't modify the original.
You can use methodsolver
to find Ruby functions.
Here is a small script,
require 'methodsolver'
solve { a = [1,2,3]; a.____(0) == [0,1,2,3] }
Running this prints
Found 1 methods
- Array#unshift
You can install methodsolver using
gem install methodsolver
irb> require 'methodsolver'
causes LoadError: cannot load such file -- method_source
from ... from /var/lib/gems/1.9.1/gems/methodsolver-0.0.4/lib/methodsolver.rb:2
. Ruby 1.9.3p484, irb 0.9.6, Ubuntu 14.
pry
instead of irb
You can use a combination of prepend
and delete
, which are both idiomatic and intention revealing:
array.delete(value) # Remove the value from the array
array.prepend(value) # Add the value to the beginning of the array
Or in a single line:
array.prepend(array.delete(value))
Success story sharing
shift
andunshift
as to which adds to the array and which removes from the array, drop an 'f' from the names mentally and you get an all-too-clear picture as to the direction. (And then you have to remember that these methods don't work on the "end" of the array. ;)