From: Alexey Muranov Date: 2011-11-06T00:46:13+09:00 Subject: [ruby-dev:44799] [ruby-trunk - Feature #5550] Hash#depth, Hash#flat_length for recursive hashes Issue #5550 has been updated by Alexey Muranov. Excuse me, can you be more precise with your example please? Ruby does not accept it (after removing the dots "...")? Are you talking about nested hashes? How about creating a class Tree that would inherit from Hash and define additional methods there? ---------------------------------------- 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