Quelle est la façon la plus simple de pousser un élément au début du tableau?

207

Je ne peux pas penser à une façon d'une ligne pour le faire. Y a-t-il un moyen?

Jeremy Smith
la source

Réponses:

387

Qu'en est-il de l'utilisation de la unshiftméthode?

ary.unshift(obj, ...) → ary
Ajoute des objets à l'avant de soi, déplaçant d'autres éléments vers le haut.

Et en cours d'utilisation:

irb>> a = [ 0, 1, 2]
=> [0, 1, 2]
irb>> a.unshift('x')
=> ["x", 0, 1, 2]
irb>> a.inspect
=> "["x", 0, 1, 2]"
mu est trop court
la source
C'est celui que je cherchais, j'ai oublié le nom.
Ed S.
1
J'ai regardé, mais je ne les ai pas vus dans un rapide scan.
Ed S.
1
@Ed: La liste des méthodes en haut de la page pourrait être mieux formatée, il est très difficile de la scanner visuellement telle quelle. Je l'ai trouvé parce que je connaissais le nom de la méthode que je cherchais :)
mu est trop court
118
Si vous avez du mal à vous rappeler entre shiftet unshiftquant à ce qui ajoute au tableau et ce qui supprime du tableau, supprimez mentalement un `` f '' des noms et vous obtenez une image trop claire de la direction. (Et puis vous devez vous rappeler que ces méthodes ne fonctionnent pas sur la "fin" du tableau.;)
Phrogz
3
@Phrogz La meilleure technique mnémonique que j'ai entendue depuis des années! :-)
konung
47

Vous pouvez utiliser insert:

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

Où le premier argument est l'index à insérer et le second la valeur.

Ed S.
la source
23
array = ["foo"]
array.unshift "bar"
array
=> ["bar", "foo"]

attention, c'est destructeur!

John H
la source
11

Vous pouvez également utiliser la concaténation de tableaux :

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

Cela crée un nouveau tableau et ne modifie pas l'original.

ma11hew28
la source
11

Depuis Ruby 2.5.0, Array est fourni avec la prepend méthode (qui n'est qu'un alias pour la unshiftméthode).

steenslag
la source
1
Cela fonctionne également avec ruby ​​2.4.4p296, alors peut-être juste avec ruby ​​2.4?
Obromios
9

Vous pouvez utiliser methodsolver pour trouver les fonctions Ruby.

Voici un petit script,

require 'methodsolver'

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

Exécution de ces impressions

Found 1 methods
- Array#unshift

Vous pouvez installer methodsolver en utilisant

gem install methodsolver
akuhn
la source
Cool, je ne pensais pas que ce serait possible d'écrire LOL
Marko Avlijaš
irb> require 'methodsolver'causes LoadError: cannot load such file -- method_sourcede ... de /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
Essayez d'utiliser pryau lieu deirb
akuhn