Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/ruby/22.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/sockets/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Ruby 嵌套散列的路径数组_Ruby_Ruby Hash - Fatal编程技术网

Ruby 嵌套散列的路径数组

Ruby 嵌套散列的路径数组,ruby,ruby-hash,Ruby,Ruby Hash,我有一份杂烩 my_hash = {"key1"=> {"key2"=> {"key3"=> "value"}}, "key4"=> "value"} 我只想以数组的形式返回键的完整路径。都是这样连在一起的 [key1, key1key2, key1key2key3, key4]. 关于如何做到这一点的任何建议。谢谢我已经能够通过本文建议的助手解决这个问题。谢谢 我使用了“aplanar”功能,即 hash.aplanar.keys 返回所有具有值的键的路径。正如

我有一份杂烩

my_hash = {"key1"=> {"key2"=> {"key3"=> "value"}}, "key4"=>  "value"}
我只想以数组的形式返回键的完整路径。都是这样连在一起的

[key1, key1key2, key1key2key3, key4].

关于如何做到这一点的任何建议。谢谢

我已经能够通过本文建议的助手解决这个问题。谢谢

我使用了“aplanar”功能,即

hash.aplanar.keys

返回所有具有值的键的路径。正如我所想。

下面是一个递归方法,它逐步修改内部哈希的键。比如说,

{"key2"=> {"key3"=> "value"}}
改为

{"key1key2"=> {"key3"=> "value"}}
{"key1key2key3"=> "value"}
之后

{"key3"=> "value"}
改为

{"key1key2"=> {"key3"=> "value"}}
{"key1key2key3"=> "value"}
这允许我简单地累积这些散列的键

def recurse(h)
  h.map do |k,v|
    next k unless v.is_a?(Hash)
    key, val = v.flatten
    [k, recurse("#{k}#{key}"=>val)]
  end.flatten
end

recurse my_hash
  #=> ["key1", "key1key2", "key1key2key3", "key4"]

那么你目前在尝试什么呢?@mudasobwa:+1表示酷的宝石名称。方法名称的“meh”:@SergioTulentsev这是monkeypatching
Hash
Array
。我需要102%确定没有冲突。在任何情况下,在版本
1.0
中,它将通过
hash.iteraptor_en.map{}
hash.iteraptor_es.mapa{}
,和
hash.iteraptorзru.iteraptorаППаа{}
@SergioTulentsev FWIW,它有Elixir的兄弟姐妹,我总是尽量避免使用方法
Array}/code>,只是因为我觉得它很丑。我欢迎大家建议我如何在这里解决这个问题。将
map
更改为
flat\u map
是不够的。