Jaki jest najłatwiejszy sposób na przesunięcie elementu na początek tablicy?

207

Nie mogę wymyślić jednego sposobu, aby to zrobić. Czy jest jakiś sposób?

Jeremy Smith
źródło

Odpowiedzi:

387

Co z użyciem tej unshiftmetody?

ary.unshift(obj, ...) → ary
Przenosi obiekty na przód jaźni, przesuwając inne elementy w górę.

I w użyciu:

irb>> a = [ 0, 1, 2]
=> [0, 1, 2]
irb>> a.unshift('x')
=> ["x", 0, 1, 2]
irb>> a.inspect
=> "["x", 0, 1, 2]"
mu jest za krótki
źródło
Tego szukałem, zapomniałem nazwy.
Ed S.
1
Spojrzałem, po prostu nie widziałem ich w szybkim skanie.
Ed S.
1
@Ed: Lista metod u góry strony może być lepiej sformatowana, bardzo trudno jest ją wizualnie zeskanować. Znalazłem to, ponieważ znałem nazwę metody, której szukałem :)
jest za krótki
118
Jeśli masz problemy z zapamiętywaniem między tym, shifta tym, unshiftco dodaje do tablicy, a które usuwa z tablicy, upuść mentalnie literę „f” z nazw i uzyskasz zbyt wyraźny obraz kierunku. (A potem trzeba pamiętać, że te metody nie działają na „końcu” tablicy;)
Phrogz
3
@Phrogz Najlepsza technika mnemoniczna, jaką słyszałem od lat! :-)
konung
47

Możesz użyć insert:

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

Gdzie pierwszym argumentem jest indeks do wstawienia, a drugim wartością.

Ed S.
źródło
23
array = ["foo"]
array.unshift "bar"
array
=> ["bar", "foo"]

ostrzegam, to destrukcyjne!

John H.
źródło
11

Możesz także użyć konkatenacji tablic :

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

Tworzy to nową tablicę i nie modyfikuje oryginału.

ma11hew28
źródło
11

Od Ruby 2.5.0 Array jest dostarczany z prepend metodą (która jest tylko aliasem dla unshiftmetody).

steenslag
źródło
1
Działa to również z Ruby 2.4.4p296, więc może po prostu z Ruby 2.4?
Obromios,
9

Możesz użyć methodsolverdo znalezienia funkcji Ruby.

Oto mały skrypt

require 'methodsolver'

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

Uruchamianie tych wydruków

Found 1 methods
- Array#unshift

Możesz zainstalować metody, używając

gem install methodsolver
akuhn
źródło
Fajnie, nie sądziłem, że będzie można napisać LOL
Marko Avlijaš
irb> require 'methodsolver'przyczyny LoadError: cannot load such file -- method_sourceod ... z /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.
Camille Goudeseune
1
Spróbuj użyć pryzamiastirb
akuhn