Skip to content

Instantly share code, notes, and snippets.

@dwickwire
Created April 26, 2012 18:03
Show Gist options
  • Save dwickwire/2501471 to your computer and use it in GitHub Desktop.
Save dwickwire/2501471 to your computer and use it in GitHub Desktop.
require 'awesome_print'
hash = {
"key_one" => {
"sub_key_one_a" => {
"sub_sub_key_one_a" => "hello I'm sub sub key one a"
},
"sub_key_one_b" => {
"sub_sub_key_one_b" => "hello I'm sub sub key one b",
"sub_sub_sub_key_one_b" => {
"sub_sub_sub_sub_key_one_b" => "hello I'm deep man."
}
}
},
"key_two" => {
"sub_key_two" => {
"sub_sub_key_two" => "hello I'm sub sub key two"
}
},
"key_three" => {
"sub_key_three_a" => [
{
"sub_sub_key_three_a" => "hello from sub sub key three a",
"sub_sub_key_three_b" => "hello from sub sub key three b",
"sub_sub_key_three_c" => "hello from sub sub key three c"
},
"sub_key_three_a_a" => [
"sub_sub_key_three_a_a" => "hello from sub sub key three a a",
]
]
},
"key_four" => [
{
"sub_key_four_a" => [
{
"sub_sub_key_four_a" => "hello from sub sub key four a",
"sub_sub_key_four_b" => "hello from sub sub key four b",
"sub_sub_key_four_c" => "hello from sub sub key four c"
},
"sub_key_four_a_a" => [
"sub_sub_key_four_a_a" => "hello from sub sub key four a a",
]
]
}
]
}
def find_key(node, search="")
if node.is_a?(Hash)
node.select do |k, v|
@key = search if k == search
find_key( node[k], search )
end
elsif node.is_a?(Array)
node.each do |elm|
if elm[search] == search && !search.empty?
@key = elm
else
result = find_key(elm, search)
@key = result if result
end
end
elsif node.is_a?(String)
# do nothing
end
@key
end
ap find_key(hash, "key_one") == "key_one"
ap find_key(hash, "sub_key_one_a") == "sub_key_one_a"
ap find_key(hash, "sub_sub_key_one_a") == "sub_sub_key_one_a"
ap find_key(hash, "sub_key_one_b") == "sub_key_one_b"
ap find_key(hash, "sub_sub_key_one_b") == "sub_sub_key_one_b"
ap find_key(hash, "key_two") == "key_two"
ap find_key(hash, "sub_key_two") == "sub_key_two"
ap find_key(hash, "sub_sub_key_two") == "sub_sub_key_two"
ap find_key(hash, "sub_sub_sub_key_one_b") == "sub_sub_sub_key_one_b"
ap find_key(hash, "sub_sub_sub_sub_key_one_b") == "sub_sub_sub_sub_key_one_b"
ap find_key(hash, "sub_sub_key_three_a") == "sub_sub_key_three_a"
ap find_key(hash, "sub_sub_key_three_b") == "sub_sub_key_three_b"
ap find_key(hash, "sub_sub_key_three_c") == "sub_sub_key_three_c"
ap find_key(hash, "sub_sub_key_three_a_a") == "sub_sub_key_three_a_a"
ap find_key(hash, "sub_key_four_a_a") == "sub_key_four_a_a"
ap find_key(hash, "sub_sub_key_four_a_a") == "sub_sub_key_four_a_a"
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment