Qual è il modo più semplice per spingere un elemento all'inizio dell'array?


207

Non riesco a pensare a un modo a una riga per farlo. C'è un modo?

Risposte:


387

Che dire dell'utilizzo del unshiftmetodo?

ary.unshift(obj, ...) → ary
Prepara gli oggetti alla parte anteriore di sé, spostando altri elementi verso l'alto.

E in uso:

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

È quello che stavo cercando, ho dimenticato il nome.
Ed S.

1
Ho guardato, ma non li ho visti in una scansione veloce.
Ed S.

1
@Ed: l'elenco dei metodi nella parte superiore della pagina potrebbe essere formattato meglio, è molto difficile eseguire la scansione visiva così com'è. L'ho trovato perché conoscevo il nome del metodo che stavo cercando :)
mu è troppo corto

118
Se hai difficoltà a ricordare tra shifte unshiftsu quale si aggiunge alla matrice e quale si rimuove dalla matrice, elimina mentalmente una 'f' dai nomi e otterrai un'immagine fin troppo chiara della direzione. (E poi devi ricordare che questi metodi non funzionano sulla "fine" dell'array.;)
Phrogz,

3
@Phrogz La migliore tecnica mnemonica che ascolto da anni! :-)
settembre

47

Puoi usare insert:

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

Dove il primo argomento è l'indice da inserire e il secondo è il valore.


23
array = ["foo"]
array.unshift "bar"
array
=> ["bar", "foo"]

attenzione, è distruttivo!



11

Da Ruby 2.5.0, Array viene fornito con il prepend metodo (che è solo un alias per il unshiftmetodo).


1
Questo funziona anche con ruby ​​2.4.4p296, quindi forse solo con ruby ​​2.4?
Obromios,

9

È possibile utilizzare methodsolverper trovare le funzioni di Ruby.

Ecco una piccola sceneggiatura,

require 'methodsolver'

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

Esecuzione di queste stampe

Found 1 methods
- Array#unshift

È possibile installare methodolver usando

gem install methodsolver

Fantastico, non pensavo che sarebbe stato possibile scrivere LOL
Marko Avlijaš il

irb> require 'methodsolver'cause LoadError: cannot load such file -- method_sourceda ... da /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
Prova a utilizzare pryinvece diirb
akuhn
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.