Project

General

Profile

Actions

Feature #5550

closed

Hash#depth, Hash#flat_length for recursive hashes

Added by sawa (Tsuyoshi Sawada) about 13 years ago. Updated about 12 years ago.

Status:
Rejected
Assignee:
-
Target version:
-
[ruby-dev:44776]

Description

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
Actions

Also available in: Atom PDF

Like0
Like0Like0Like0Like0