Какой самый простой способ поместить элемент в начало массива?

207

Я не могу придумать однострочный способ сделать это. Есть ли способ?

Джереми Смит
источник

Ответы:

387

Как насчет использования unshiftметода?

ary.unshift(obj, ...) → ary
Готовит объекты впереди себя, перемещая другие элементы вверх.

И в использовании:

irb>> a = [ 0, 1, 2]
=> [0, 1, 2]
irb>> a.unshift('x')
=> ["x", 0, 1, 2]
irb>> a.inspect
=> "["x", 0, 1, 2]"
мю слишком коротка
источник
Это тот, кого я искал, забыл имя.
Эд С.
1
Я посмотрел, просто не увидел их при быстром сканировании.
Эд С.
1
@Ed: Список методов в верхней части страницы может быть лучше отформатирован, визуально сканировать его очень сложно. Я нашел его, потому что знал название метода, который искал :)
мю слишком короткое
118
Если у вас возникают проблемы с запоминанием между shiftи unshiftотносительно того, что добавляет к массиву, а что удаляет из массива, мысленно отбросьте «f» из имен, и вы получите слишком четкую картину относительно направления. (И тогда вы должны помнить, что эти методы не работают на «конце» массива.;)
Phrogz
3
@Phrogz Лучшая мнемоническая техника, которую я когда-либо слышал! :-)
konung
47

Вы можете использовать insert:

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

Где первый аргумент - это индекс для вставки, а второй - значение.

Эд С.
источник
23
array = ["foo"]
array.unshift "bar"
array
=> ["bar", "foo"]

будьте осторожны, это разрушительно!

Джон Х
источник
11

Начиная с Ruby 2.5.0, Array поставляется с prepend методом (который является псевдонимом для unshiftметода).

steenslag
источник
1
Это также работает с ruby ​​2.4.4p296, так что, может быть, просто с ruby ​​2.4?
Обромиос
9

Вы можете использовать, methodsolverчтобы найти функции Ruby.

Вот небольшой сценарий,

require 'methodsolver'

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

Запуск этой печати

Found 1 methods
- Array#unshift

Вы можете установить methodolver используя

gem install methodsolver
akuhn
источник
Круто, не думал, что можно будет написать LOL
Марко Авлияш
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. Ruby 1.9.3p484, irb 0.9.6, Ubuntu 14.
Камиль Гудесюн,
1
Попробуйте использовать pryвместоirb
акун