Issue #5550 has been updated by Yukihiro Matsumoto.

Status changed from Open to Feedback

Hashの本質はkey-valueのマッピングなので、valueが再帰的にHashであることを想定した(再帰的なHashでなければ役に立たない)メソッドを追加することには抵抗があります。
わずか6行のmonkey patchingを避けるためにすべてのRubyに追加すべきメソッドですか?
----------------------------------------
Feature #5550: Hash#depth, Hash#flat_length for recursive hashes
http://redmine.ruby-lang.org/issues/5550

Author: Tsuyoshi Sawada
Status: Feedback
Priority: Normal
Assignee: 
Category: 
Target version: 


I often have a hash whose value is recursively a hash, which may look like the following:

    {"Japan" =>
        {"Hokkaido" => "Sapporo", ...},
        {"Honhuu" =>
            {"Aomori" => "Hirosaki", ...},
            {"Akita" => ...},
            ...
        },
        {"Shikoku" => ...},
        ...
    }

In these cases, it will be convenient if there is a way to know the (maximum) depth of he original hash, and the numbers of all the "terminal nodes". I would like to propose two methods Hash#depth and Hash#flat_length, whose Ruby implementation can be as follows:

    class Hash
	def depth
		1 + (values.map{|v| Hash === v ? v.depth : 1}.max)
	end
	def flat_length
		values.inject(0){|sum, v| sum + (Hash === v ? v.flat_length : 1)}
	end
    end


-- 
http://redmine.ruby-lang.org