2017-03-16 52 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