una segun que matriz matrices lineal iyj identificar extraer elementos elemento componentes compone aij ruby arrays

ruby - segun - ¿Cómo reemplazo un elemento de una matriz?



que compone una matriz (8)

Aquí hay otra forma sencilla de reemplazar el valor 5 en la matriz:

a[-1, 1] = [11, 22, 33, 44]

Esto usa el método Array#[]= . Aunque no estoy exactamente seguro de por qué funciona.

¿Cómo puedo sustituir un elemento en una matriz?

a = [1,2,3,4,5]

Necesito reemplazar 5 con [11,22,33,44].flatten!

para que a ahora se convierta

a = [1,2,3,4,11,22,33,44]


Esta variante encontrará los 5 sin importar en qué parte de la matriz se encuentre.

a = [1, 2, 3, 4, 5] a[a.index(5)]=[11, 22, 33, 44] if a.index(5) a.flatten!


La versión de bta usa a.index (5) es la más rápida:

a[a.index(5)] = b if a.index(5) # 5.133327 sec/10^6

Al menos un 10% más rápido que el de Ryan McGeary :

a.map!{ |x| x == 5 ? b : x } # 5.647182 sec/10^6

Sin embargo, tenga en cuenta que a.index (5) solo devuelve el primer índice donde se encuentra 5. Entonces, dada una matriz donde 5 aparece más de una vez, los resultados serán diferentes:

a = [1, 2, 3, 4, 5, 5] b = [11,22,33,44] a[a.index(5)] = b if a.index(5) a.flatten # => [1, 2, 3, 4, 11, 22, 33, 44, 5] a.map!{ |x| x == 5 ? b : x } a.flatten # => [1, 2, 3, 4, 11, 22, 33, 44, 11, 22, 33, 44]


No estoy seguro de lo que intentas hacer aquí, ¿pero estás buscando algo como esto?

a = [1, 2, 3, 4, 5] a.delete_at(4) a = a.concat([11,22,33,44])

Hay varias formas de hacerlo: no creo que el código anterior sea especialmente atractivo. Todo depende del significado de ''5'' en su matriz original.


No estoy seguro si está buscando sustituir un valor particular o no, pero esto funciona:

a = [1, 2, 3, 4, 5] b = [11, 22, 33, 44] a.map! { |x| x == 5 ? b : x }.flatten!

Esto itera sobre los valores de a , y cuando encuentra un valor de 5 , reemplaza ese valor con la matriz b , luego aplana las matrices en una matriz.


Quizás te refieres a:

a[4] = [11,22,33,44] # or a[-1] = ... a.flatten!

Una solución funcional podría ser mejor, ¿qué tal solo:

a[0..-2] + [11, 22, 33, 44]

cuyos rendimientos...

=> [1, 2, 3, 4, 11, 22, 33, 44]


Realmente no tienes que aplanar si simplemente concatena. Así que recorte el último elemento de la primera matriz y concatene:

a = [ 1, 2, 3, 4, 5 ] #=> [1, 2, 3, 4, 5] t = [11, 22, 33, 44] #=> [11, 22, 33, 44] result = a[0..-2] + t #=> [1, 2, 3, 4, 11, 22, 33, 44]

a [0 ..- 2] es una operación de división que toma todos menos el último elemento de la matriz.

¡Espero eso ayude!


Array#delete devolverá el elemento o nil. Puede usar esto para saber si desea o no impulsar sus nuevos valores

a.push 11,22,33,44 if a.delete 5