設置陣列樹面料我有值的數組:如何使用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