配列の配列を配列とハッシュの組み合わせに変換しようとしています。私は私が達成しようとしているかを説明してみましょう:配列の配列を配列とハッシュの組み合わせに変換する
入力:
[['a'], ['b'], ['a', 'b', 'c'], ['a', 'b', 'd']]
予想される出力:
[:a => [{:b => [:c, :d]}], :b]
私はそう遠いが出ている何:
def converter(array)
tree_hash = {}
array.each do |path|
path.each_with_index.inject(tree_hash) do |node, (step, index)|
step = step.to_sym
if index < path.size - 1
node[step] ||= {}
else
node[step] = nil
end
end
end
tree_hash
end
、それは私に次のような結果得られます。
converter([['a'], ['b'], ['a', 'b', 'c'], ['a', 'b', 'd']])
=> {:a=>{:b=>{:c=>nil, :d=>nil}}, :b=>nil}
私はこの問題を解決することができるように、誰もがいくつかの光を投げることができるし。この問題の名前はありますか?直接グラフ/間接グラフ/グラフ理論ですか?私はグラフや樹木に関する知識を勉強して改善したいと思っています。
これを解決するのを手伝ったり、解決方法を教えていただければ幸いです。
ありがとうございました。
あなたは常に2つのキーを持っていますか。フォローアップアレイは常にそれらのキーで始まりますか? – ndn
もう一つの入力例は次のようなものです: '[['foo']、['bar'、 'car']]'そして出力は '':foo、{:bar => [:car]}] ''それは@ndnの意味ですか? :) –
実際にはもう少し複雑になっています。この問題は、どのような現実世界のユースケースが原因でしたか? – ndn