2017-03-16 49 views
-2

设置阵列树面料我有值的数组:如何使用Ruby

list = [["a"], ["a", "b"], ["a", "b", "c"], ["a", "b", "c", "d"]] 

我想这个数组转换为打印树结构,就像计算机的目录结构。

我试图使用递归函数来解决这个问题。并期望结果是哈希类型,如下所示:

{ "a" => { "b" => { "c" => { "d" => {} } } } } 

这个问题将帮助我显示树形状的redis键,它是折叠的。

+1

你可以根据Ruby代码定义所需的结果,而不是图片吗? – tadman

+0

我更新了这个问题。谢谢! – Yingce

+0

如果你想要这样的关键名字,从字面上看,这很奇怪,这将真正使解决方案复杂化。你至少应该尝试自己解决这个问题,然后发布代码表明你有多远。您可以遍历该数组并使用'split(':')'获取组件。 – tadman

回答

1

使用辉煌Hashie::MashKernel.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" => {} } } } } 
+0

这应该是讽刺代码,因为OP没有写任何东西,对吧? –

+0

@EricDuminil只是半讽刺的,诚实。这是一个完美的工作代码,只要你是redis数据库的维护者,它就是完全安全的。 – mudasobwa

+0

我只是在这里看不到需要使用'eval'。 –

1

你没有表现出任何代码,所以我也不会。

您正在寻找Trie,而不仅仅是一棵树。

Pickanygem