16 - Arreglos: eliminación de elementos

Hay varios métodos que nos permiten eliminar elementos de un arreglo en Ruby, según nuestras necesidades utilizaremos uno u otro.

  • El primer método que nombraremos nos permite eliminar un elemento de una determinada posición del Array.

    arreglo = [10, 20, 30, 20, 50, 20]
    arreglo.delete_at(2)
    print arreglo # [10, 20, 20, 50, 20]
    

    Se elimina el tercer elemento del array. Recordar que el primer elemento de un arreglo es el cero.

  • El segundo método de la clase Array se llama delete y nos elimina todos los elementos que coinciden con la información que le pasamos en el parámetro.

    arreglo = [10, 20, 30, 20, 50, 20]
    arreglo.delete(20)
    print arreglo # [10, 30, 50]
    

    Cuando llamamos al método delete y le pasamos el valor 20 luego se eliminan 3 elementos, es decir todos aquellos que coinciden.

  • El siguiente método hay que pasar un bloque y disponer una condición, todos los elementos que cumplen dicha condición son eliminados del Array.

    arreglo = [10, 20, 30, 20, 50, 20]
    arreglo.delete_if {|elemento| elemento <= 20}
    print arreglo # [30, 50]
    

    Es decir todos los elementos del Array que tienen una información menor o igual a 20 son eliminados.

Problema 1:

Cargar en un arreglo 5 enteros por teclado, luego borrar todos los elementos iguales al último, inclusive el último.

Programa: ejercicio076.rb

arreglo = []
x = 0
while x < 5
  print "Ingrese un valor entero:"
  valor = gets.to_i
  arreglo << valor
  x = x + 1
end
puts "Arreglo inicial"
print arreglo, "\n"
arreglo.delete(arreglo[-1])
puts "Arreglo luego de borrar todos los que coinciden con el último"
print arreglo

Primero cargamos 5 enteros en el arreglo:

while x < 5
  print "Ingrese un valor entero:"
  valor = gets.to_i
  arreglo << valor
  x = x + 1
end

Llamamos al método delete y le pasamos el valor del último elemento del arreglo, como sabemos si indicamos el subíndice -1 en el arreglo estamos accediendo al último:

arreglo.delete(arreglo[-1])

Podemos indicar también con la sintaxis:

arreglo.delete(arreglo[4])

Acotaciones

El método delete retorna nil (nulo) si no hay ningún elementos a borrar:

arreglo = [10, 20, 30, 20, 50, 20]
resu = arreglo.delete(120)
if resu == nil
  puts "No hay elementos con el valor 120 en el arreglo #{arreglo}"
end

En este caso el if se verifica verdadero ya que el valor 120 no está en el Array.

Otro método útil de la clase Array es clear que tiene por objetivo eliminar todos los elementos del arreglo:

arreglo = [10, 20, 30, 20, 50, 20]
puts arreglo.length # 6
arreglo.clear
puts arreglo.length # 0

Problemas propuestos

  • Crear un Array de 5 enteros y cargarlos por teclado. Borrar los elementos mayores o iguales a 10.
  • Crear por asignación un Array con 10 elementos enteros.
    Primero borrar los elementos que almacenan un valor par y finalmente borrar el primer y último elemento del Array.
Solución
ejercicio077.rb

arreglo = []
x = 0
while x < 5
  print "Ingrese un valor entero:"
  valor = gets.to_i
  arreglo << valor
  x = x + 1
end
puts "Arreglo inicial"
print arreglo, "\n"
arreglo.delete_if{ |elemento| elemento >= 10 }
puts "Arreglo luego de borrar todos los elementos mayores o iguales a 10"
print arreglo




ejercicio078.rb

arreglo = [10, 3, 54, 22, 23, 66, 12, 55, 233, 2]
puts "Arreglo original #{arreglo}"

arreglo.delete_if {|elemento| elemento % 2 == 0}
puts "Arreglo luego de borrar los elementos pares #{arreglo}"

arreglo.delete_at(0)
arreglo.delete_at(arreglo.length-1)
puts "Arreglo luego de borrar el primer y último elemento #{arreglo}"