设置阵列树面料我有值的数组:如何使用Ruby
list = [["a"], ["a", "b"], ["a", "b", "c"], ["a", "b", "c", "d"]]
我想这个数组转换为打印树结构,就像计算机的目录结构。
我试图使用递归函数来解决这个问题。并期望结果是哈希类型,如下所示:
{ "a" => { "b" => { "c" => { "d" => {} } } } }
这个问题将帮助我显示树形状的redis键,它是折叠的。
设置阵列树面料我有值的数组:如何使用Ruby
list = [["a"], ["a", "b"], ["a", "b", "c"], ["a", "b", "c", "d"]]
我想这个数组转换为打印树结构,就像计算机的目录结构。
我试图使用递归函数来解决这个问题。并期望结果是哈希类型,如下所示:
{ "a" => { "b" => { "c" => { "d" => {} } } } }
这个问题将帮助我显示树形状的redis键,它是折叠的。
使用辉煌Hashie::Mash
和Kernel.eval
:
input = [%w|a|, %w|a b|, %w|a b c|, %w|a b c d|]
require 'hashie/mash'
input.each_with_object(Hashie::Mash.new) do |e, acc|
eval ["acc", e.map{ |k| "#{k}!" }].join(".")
end
#⇒ { "a" => { "b" => { "c" => { "d" => {} } } } }
这应该是讽刺代码,因为OP没有写任何东西,对吧? –
@EricDuminil只是半讽刺的,诚实。这是一个完美的工作代码,只要你是redis数据库的维护者,它就是完全安全的。 – mudasobwa
我只是在这里看不到需要使用'eval'。 –
你可以根据Ruby代码定义所需的结果,而不是图片吗? – tadman
我更新了这个问题。谢谢! – Yingce
如果你想要这样的关键名字,从字面上看,这很奇怪,这将真正使解决方案复杂化。你至少应该尝试自己解决这个问题,然后发布代码表明你有多远。您可以遍历该数组并使用'split(':')'获取组件。 – tadman