1. ホーム
  2. ruby-on-rails

[解決済み] ハッシュから空の要素をすべて削除する / YAML?

2022-04-26 20:09:22

質問

ネストされたHashまたはYAMLファイルから、すべての空の要素(空のリストアイテム)を削除するにはどうすればよいでしょうか?

どのように解決するのですか?

Hashに以下のようなコンパクトなメソッドを追加することができます。

class Hash
  def compact
    delete_if { |k, v| v.nil? }
  end
end

または再帰をサポートするバージョンの場合

class Hash
  def compact(opts={})
    inject({}) do |new_hash, (k,v)|
      if !v.nil?
        new_hash[k] = opts[:recurse] && v.class == Hash ? v.compact(opts) : v
      end
      new_hash
    end
  end
end