Ich habe versucht, ein Array von Arrays in eine Kombination aus Arrays und Hashes zu konvertieren. Lassen Sie mich erklären, was ich zu erreichen versuche:Array von Arrays in eine Kombination aus Arrays und Hashes konvertieren
Eingang:
[['a'], ['b'], ['a', 'b', 'c'], ['a', 'b', 'd']]
Erwartete Ausgabe:
[:a => [{:b => [:c, :d]}], :b]
Was ich mit so weit gekommen sind ist :
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
und es gibt mir das folgende Ergebnis:
converter([['a'], ['b'], ['a', 'b', 'c'], ['a', 'b', 'd']])
=> {:a=>{:b=>{:c=>nil, :d=>nil}}, :b=>nil}
Kann jemand etwas Licht werfen, so dass ich dieses Problem lösen kann. Gibt es einen Namen für dieses Problem, direkte Graph/indirekte Graph/Graph-Theorie? Ich bin bereit, mein Wissen über Graphen und Bäume zu studieren und zu verbessern.
Ich würde es schätzen, wenn Sie mir helfen, das zu lösen, oder mir einige Anweisungen geben, wie man das löst.
Danke.
haben Sie immer zwei Schlüssel. Beginnen die Follow-up-Arrays immer mit diesen Schlüsseln? – ndn
Ein anderes Beispiel könnte sein: '[['foo'], ['bar', 'car']]' 'und die Ausgabe lautet:' [: foo, {: bar => [: car]}] 'Does macht es Sinn @ndn? :) –
Es macht es tatsächlich ein bisschen komplexer. Aus welchem realen Anwendungsfall stammt dieses Problem? – ndn