Que fácilmente puede agregar un elemento a una matriz:

arr = [1]
arr << 2
# => [1, 2]

¿Cómo puedo añadir múltiples elementos a mi matriz?

Me gustaría hacer algo como arr << [2, 3], pero esto se añade una matriz a mi matriz #=> [1, [2, 3]]

  • arr.push *another_arr agregará el another_arr como aplanado valores (no agregar un array, pero cada valor)
InformationsquelleAutor davegson | 2013-12-19

7 Comentarios

  1. 57

    Utilizando += operador:

    arr = [1]
    arr += [2, 3]
    arr
    # => [1, 2, 3]
    • Tenga en cuenta que esto no agregar a la matriz; se crea una nueva matriz que es una concatenación de los lados izquierdo y derecho, y se asigna a arr.
    • Estás en lo correcto. Gracias por el comentario.
  2. 29

    Hacer uso de .push

    arr = [1]
    arr.push(2, 3)
    # => [1, 2, 3]

    También puede .push() todos los elementos de otra matriz

    second_arr = [2, 3]
    arr.push(*second_arr)
    # => [1, 2, 3]

    , Pero toma nota! sin la * se agregará la second_array a arr.

    arr.push(second_arr)
    # => [1, [2, 3]]

    Inferior alternativa:

    También podría cadena de la << llamadas:

    arr = [1]
    arr << 2 << 3
    # => [1, 2, 3]
    • Sorprendido de que yo tenía que venir de tan lejos para encontrar esta también. No sabía que se podía empujar con múltiples parámetros.
  3. 16

    Usted también puede hacerlo de la siguiente utilizando Array#concat:

    arr = [1]
    arr.concat([2, 3]) # => [1, 2, 3]
    • Sorprendido de que yo tenía que venir de tan lejos para encontrar esto.
  4. 7

    Hay varios métodos para lograr que:

    array = [1, 2]
    
    array += [3, 4] # => [1, 2, 3, 4]
    
    # push: put the element at the end of the array
    array.push([5, 6]) # =>  [1, 2, 3, 4, [5, 6]]
    array.push(*[7, 8]) # => [1, 2, 3, 4, [5, 6], 7, 8]
    
    array << 9 # => [1, 2, 3, 4, [5, 6], 7, 8, 9]
    
    # unshift: put the element at the beginning of the array:
    array.unshift(0) #=> [0, 1, 2, 3, 4, [5, 6], 7, 8, 9]

    Algunos enlaces:

  5. 1

    solo uso .flatten

    por ejemplo, si usted tiene esta matriz

    array = [1,2,3,4,5,6]

    y hacerlo

    array.push([123,456,789])
    array.push([["abc","def"],["ghi","jkl"]])

    su cadena sería algo como

    array = [[1,2,3,4,5,6],[123,456,789],[["abc","def"],["ghi","jkl"]]]

    todo lo que necesitas hacer es

    array.flatten!

    y ahora su matriz gustaría que este

    array = [1,2,3,4,5,6,123,456,789,"abc","def","ghi","jkl"]
    • El uso de flatten no es la mejor manera de hacer esto. La comprensión de cómo las matrices se concatenan muestra que el uso de + o += evita la necesidad de usar flatten a todos. flatten es para aquellos momentos en los que obtener las matrices que no nos genere, o eran demasiado perezosos para construir correctamente.
    • Es mejor que use un final flatten a través de una matriz de matrices construidas usando push que el uso de += para cada concatenación. Obtendrá más basura y más de la copia con el último. También me gustaría esperar O(n^2) tiempo desde el último, y O(n) de la antigua.
  6. -1

    Uno más, para la construcción de una matriz con los elementos de n-veces usted puede utilizar el splat (también conocido como asterisk, *):

    arr = [true] * 4           # => [true, true, true, true]

    También puede utilizar el splat para la repetición de varios elementos:

    arr = [123,'abc'] * 3      # => [123,'abc',123,'abc',123,'abc']

    Por supuesto, usted puede utilizar cualquier matriz de los operadores con los que, como +:

    arr = [true] * 3 + [false] # => [true, true, true, false]

    Yo uso, que junto con #sample para generar al azar resultados ponderados:

    arr.sample                 # => true 3 out of 4 times
    • No sé por qué el abajo votos (de la misma persona, porque obviamente se puso votado dos veces el mismo día, después de nada durante dos años). Es preciso y responde a la OP.

Dejar respuesta

Please enter your comment!
Please enter your name here