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