Який найпростіший спосіб підштовхнути елемент до початку масиву?


Відповіді:


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: Список методів у верхній частині сторінки може бути краще відформатований, дуже важко візуально сканувати, як є. Я знайшов це, тому що знав ім'я методу, якого я шукав :)
mu занадто короткий

118
Якщо у вас виникли проблеми згадування між shiftі , unshiftяк в який додає до масиву і який видаляє з масиву, впустити «е» з імен , розумово , і ви отримаєте все занадто чітке уявлення щодо направлення. (І тоді ви повинні пам'ятати, що ці методи не працюють на "кінці" масиву.;)
Фрогз

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методу).


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

Класно, не думав, що це буде можливим написати 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
акун
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.