ルートのようなツリーとして表示するハッシュのハッシュがあります。以下に、期待される結果と得られた結果の例を追加しました。
ハッシュの例:
hash = {
          'movies' => {
            'action' => {
              '2007' => ['video1.avi', 'x.wmv'],
              '2008' => ['']
            },
            'comedy' => {
              '2007' => [],
              '2008' => ['y.avi']
            }
          },
          'audio' => {
            'rock' => {
              '2003' => [],
              '2004' => ['group', 'group1']
            }
          }
        }
私はこの結果を期待しました:
movies
movies\action
movies\action\2007
movies\action\2007\video1.avi
movies\action\2007\x.wmv
movies\action\2008
movies\comedy\2007
movies\comedy\2008
movies\comedy\2008\y.avi
audio
audio\rock\2003
audio\rock\2004
audio\rock\2004\group
audio\rock\2004\group1
ここに私が作ったいくつかのコードがあります:
def meth(key, val)
  val.each do |key1, val1|
    puts "#{key}/#{key1}"
    meth(key1, val1) if val1
  end
end
hash.each do |key, val|
  puts key
  meth(key,val)
end
次の結果が返されます。
movies
movies/action
action/2007
2007/video1.avi
2007/x.wmv
action/2008
2008/
movies/comedy
comedy/2007
comedy/2008
2008/y.avi
audio
audio/rock
rock/2003
rock/2004
2004/group
2004/group1
誰でもこれを行う方法を説明できますか?
アップデート
回答ありがとうございます。この場合、このコードを使用して理解しました。ヒントはkey1、前の結果に設定することでした。
def meth key, val
  val.each do |key1, val1|
    puts "#{key}/#{key1}"
    key1 = "#{key}/#{key1}"
    meth(key1, val1) if val1
  end
end