¿Cómo puedo sustituir un elemento en una matriz?¿Cómo reemplazo el elemento de una matriz?
a = [1,2,3,4,5]
tengo que sustituir 5 con [11,22,33,44].flatten!
de manera que se convierte ahora en a
a = [1,2,3,4,11,22,33,44]
¿Cómo puedo sustituir un elemento en una matriz?¿Cómo reemplazo el elemento de una matriz?
a = [1,2,3,4,5]
tengo que sustituir 5 con [11,22,33,44].flatten!
de manera que se convierte ahora en a
a = [1,2,3,4,11,22,33,44]
seguro si usted está buscando para 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!
Este 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.
Si bien esto funciona, es demasiado complicado para lo que el cartel original intenta hacer. El uso de arreglos de matriz para reemplazar un rango es una solución más simple y directa. Ver [esta respuesta] (http://stackoverflow.com/a/1704805/456814). –
@Ryan McGeary Necesito el mismo método excepto el valor de 5 Quiero reemplazar todos los números en la matriz divisible por 3 con una palabra "BINGO". Como hacer eso. Intenté 'ary = (0..100) .to_a ary.map! {| I | i% 3 == 0? i: "BINGO"} 'Reemplaza a todos excepto los divisibles por 3 – DebRaj
¡funciona como un amuleto para mí! ¡Gracias! – ramya
gweg, no está seguro de lo que estás tratando de hacer aquí, pero estás buscando algo como ¿esta?
a = [1, 2, 3, 4, 5]
a.delete_at(4)
a = a.concat([11,22,33,44])
Existen varias formas de hacerlo: no creo que el código anterior sea especialmente atractivo. Todo depende de la importancia de '5' en tu matriz original.
Quizás quiso decir:
a[4] = [11,22,33,44] # or a[-1] = ...
a.flatten!
Una solución funcional podría ser más agradable, ¿qué hay de justo:
a[0..-2] + [11, 22, 33, 44]
que produce ...
=> [1, 2, 3, 4, 11, 22, 33, 44]
+1 agradable! !! solo una pequeña corrección, en la primera línea es 'a [4]' no 'a [5]' – alfasin
Roger, corregido ... – DigitalRoss
+1 ¡Gracias! La solución funcional era más adaptable a cuando quería reemplazar un elemento por dos valores en una ubicación variable en la matriz, es decir: a [0..b-1] + [val1, val2] + [b + 1 .. -1] – mm2001
Realmente no lo hace tiene que aplanarse si acaba de concatenar. Así que recortar el último elemento de la primera matriz y concatenar:
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 lleva todos excepto el último elemento de la matriz.
Espero que ayude!
Esta variante encontrará el 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 usando a.index (5) es el más rápido:
a[a.index(5)] = b if a.index(5) # 5.133327 sec/10^6
Al menos un 10% más rápido que Ryan McGeary 's uno:
a.map!{ |x| x == 5 ? b : x } # 5.647182 sec/10^6
Sin embargo, cabe destacar que una .index (5) solo devuelve el primer índice donde se encuentra 5. Así, dada una matriz en 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]
Array#delete será devolver el artículo o nula.Usted puede usar esto para saber si o no para empujar sus nuevos valores
a.push 11,22,33,44 if a.delete 5
¡Este es un trabajo muy limpio y agradable! – bagofcole
Aquí es otra forma sencilla de reemplazar el valor 5
en la matriz:
a[-1, 1] = [11, 22, 33, 44]
Este utiliza el método Array#[]=
. Aunque no estoy muy seguro de por qué funciona.
por favor, nos da una explicación de por qué necesita hacer esto y en qué contexto esto es – Earlz
podría querer cambiar el título de cómo sustituir los elementos de la matriz en un iterador de estilo 'cada' ruby – peterk