Qual é a maneira mais fácil de enviar um elemento para o início da matriz?

207

Não consigo pensar em uma maneira única de fazer isso. Há algum jeito?

Jeremy Smith
fonte

Respostas:

387

Que tal usar o unshiftmétodo?

ary.unshift(obj, ...) → ary
Anexa objetos à frente de si, movendo outros elementos para cima.

E em uso:

irb>> a = [ 0, 1, 2]
=> [0, 1, 2]
irb>> a.unshift('x')
=> ["x", 0, 1, 2]
irb>> a.inspect
=> "["x", 0, 1, 2]"
mu é muito curto
fonte
Era o que eu procurava, esqueci o nome.
Ed S.
1
Eu olhei, só não os vi em uma verificação rápida.
22411 Ed S.
1
@ Ed: A lista de métodos na parte superior da página pode ser melhor formatada, é muito difícil digitalizar visualmente. Encontrei-o porque sabia o nome do método que procurava :)
mu é muito curto
118
Se você estiver com problemas para se lembrar entre shifte unshiftsobre o que adiciona à matriz e a remove da matriz, solte um 'f' dos nomes mentalmente e você obtém uma imagem muito clara da direção. (E então você tem que lembrar que esses métodos não funcionam no "fim" da matriz;.)
Phrogz
3
@Phrogz A melhor técnica mnemônica que já ouvi nos últimos anos! :-)
konung
47

Você pode usar insert:

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

Onde o primeiro argumento é o índice a ser inserido e o segundo é o valor.

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

esteja avisado, é destrutivo!

John H
fonte
11

Você também pode usar a concatenação de matriz :

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

Isso cria uma nova matriz e não modifica o original.

ma11hew28
fonte
11

Desde o Ruby 2.5.0, o Array é enviado com o prepend método (que é apenas um alias para o unshiftmétodo).

steenslag
fonte
1
Isso também funciona com o ruby ​​2.4.4p296, então talvez apenas com o ruby ​​2.4?
Obromios
9

Você pode usar methodsolver para encontrar funções Ruby.

Aqui está um pequeno script,

require 'methodsolver'

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

Executando isso imprime

Found 1 methods
- Array#unshift

Você pode instalar o métodosolver usando

gem install methodsolver
akuhn
fonte
Legal, não achei que seria possível escrever LOL #
Marko Avlijaš
irb> require 'methodsolver'causas 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
Tente usar em pryvez deirb
akuhn