L'hash è la struttura dati che userai di più in Ruby. Oltre a [], ha metodi che risolvono problemi ricorrenti.

config = { host: "localhost", port: 3000 }

config.fetch(:port)             # 3000
config.fetch(:timeout, 30)      # 30 (default se manca)
config.dig(:db, :name)          # nil, senza esplodere su chiavi annidate

prezzi = { pane: 2, latte: 1 }
prezzi.transform_values { |v| v * 1.1 }  # aumento del 10%
prezzi.sum { |_, v| v }         # 3

fetch con un default evita i nil a sorpresa; dig naviga strutture annidate senza mille controlli; transform_values e each_with_object costruiscono nuovi hash in modo pulito.

Conoscere questi metodi significa scrivere meno if key, e lasciare che sia l'hash a gestire i casi limite.