Como hemos dicho un Hash es una estructura de datos que podemos agregar elementos, modificarlos y también borrarlos.
Tenemos al igual que la clase Array un método llamado clear que borra todas componentes del Hash.
Veamos el método delete que le pasamos como parámetro la clave de una componente y si la encuentra la elimina del Hash (se borra la clave y su valor)
Crear y cargar por asignación un Hash donde se almacene como clave el nombre de producto y como valor el precio del mismo.
Ingresar por teclado el nombre de un producto y si existe proceder a eliminarlo.
productos = {"manzanas" => 25, "peras" => 32, "naranjas" => 15, "kiwis" => 56} puts productos print "Ingrese un nombre de articulo para eliminarlo:" prod = gets.chomp if productos.delete(prod)==nil puts "No existe un producto con el nombre ingresado" else puts "Se eliminó el producto" end puts productos
Al método delete de la clase Hash le pasamos el nombre del producto a eliminar. Si no existe retorna un nil en caso contrario retorna el elemento eliminado:
print "Ingrese un nombre de articulo para eliminarlo:" prod = gets.chomp if productos.delete(prod)==nil puts "No existe un producto con el nombre ingresado" else puts "Se eliminó el producto" end
Si queremos borrar varios elementos de un Hash disponemos del método delete_if que mediante un bloque indicamos la condición que debe cumplir la componente para ser eliminado.
Crear y cargar por asignación un Hash donde se almacene como clave el nombre de producto y como valor el precio del mismo.
Eliminar todos los elementos con un precio mayor a 30.
productos = {"manzanas" => 25, "peras" => 32, "naranjas" => 15, "kiwis" => 56} puts productos productos.delete_if {|clave, valor| valor > 30} puts "Luego de eliminar todos los productos con un precio mayor a 30" puts productos
El método delete_if borra todos los elementos del Hash que cumplen la condición que el valor sea mayor a 30:
productos.delete_if {|clave, valor| valor > 30}
Si queremos eliminar una serie de componentes sin modificar el Hash originario sino generando uno nuevo podemos utilizar el método reject:
productos = {"manzanas" => 25, "peras" => 32, "naranjas" => 15, "kiwis" => 56} puts productos prod_nuevos = productos.reject {|clave, valor| valor > 30} puts "Luego de eliminar todos los productos con un precio mayor a 30" puts prod_nuevos puts "El Hash original no se modifica" puts productos
El Hash productos nunca se modifica (no se borran elementos), lo que sucede es que el método reject retorna un Hash con los elementos contenidos en productos salvo lo que se borran por la condición impuesta:
prod_nuevos = productos.reject {|clave, valor| valor > 30}