2011-06-24 11 views
13

Estoy tratando de averiguar qué hace la función insert en Ruby.¿Cómo funciona .insert?

He consultado a Google y ruby-doc.com pero la explicación no es suficiente para describir esta (aparentemente) misteriosa función.

Aquí es lo que me confunde:

a = %w{a b c d} 
puts a.insert(4, 5) output = a,b,c,d,5 

La primera cuestión que se plantea es, ¿por qué es el 4 no insertada?

puts a.insert(2,2,6) 

La salida es:

a 
b 
2 
6 
c 
d 

dos preguntas planteadas por esto son

  1. ¿Por qué no se ha insertado 2 dos veces?
  2. ¿Por qué los 2 y los 6 (aparentemente) se colocan arbitrariamente entre byc?

Respuesta

36

No estoy seguro de cuál es la confusión. A partir de los documentos Ruby:

ary.insert(index, obj...) -> ary 

inserta los valores dados antes de que el elemento con el índice dado (que puede ser negativo).

a = %w{ a b c d } 
a.insert(2, 99)   #=> ["a", "b", 99, "c", "d"] 
a.insert(-2, 1, 2, 3) #=> ["a", "b", 99, "c", 1, 2, 3, "d"] 

Así, a.insert(2, 99) está insertando 99 en la matriz justo antes del array 2. Recuerde que el índice de una matriz comienza en 0, por lo que es la tercera ranura en la matriz.

El segundo ejemplo es insertar la matriz [1,2,3] en la segunda ranura de la matriz, porque las compensaciones negativas cuentan desde el final de la matriz. -1 es el último índice, -2 es el penúltimo.

Los documentos de matriz dicen bien:

indización de matrices comienza en 0, como en C o Java. Se supone que un índice negativo es relativo a al final de la matriz; es decir, un índice de -1 indica el último elemento de la matriz, -2 es el penúltimo elemento de la matriz, y así sucesivamente .

Estos son conceptos MUY importantes para aprender en programación en general, no solo en Ruby.

5

Parece que el primer parámetro es el índice para insertar en, y el resto son los elementos para insertar.

El docs parece confirmar esto, enumerando la función como ary.insert(index, obj...) → ary

Si simplemente desea agregar algunos valores al final de la matriz (no sé la sintaxis de Ruby, pero esto debe ser correcto) I cree que querrá llamar al a.insert(a.length, 4, 5) o a.insert(a.length, 2, 2, 6), por ejemplo.

+0

Gracias. Hará. – Bodhidarma

+3

Si simplemente desea agregar algunos valores al final de la matriz, use el método ['Array # push'] (http://www.ruby-doc.org/core/classes/Array.html#M000226). –