[topic] フォルダパス一覧のツリー構造への変換
Posted feedbacks - Ruby
作成はちょっと変則的なinjectと破壊的作用の組み合わせでハッシュでツリーを。
表示は素直な再帰で。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 | path_list = %w(
abc\\def
abc\\def\\gh
abc\\def\\ij
abc\\jk\\lm
de
)
def dump_tree(h, pad="")
h.sort_by{|k,v| k}.each{|k,v|
print(pad, "┗", k, "\n")
dump_tree(v, pad+" ")
}
end
h = {}
path_list.each{|path|
path.split(/\\/).inject(h){|k,v|
k[v] ||= {}
}
}
dump_tree(h)
|



todogzm
#4458()
Rating1/1=1.00
フォルダパスの区切り文字は'\'文字を使用しています。
以下のような1行1パスのフォルダのパスがあった場合、
abc\def
abc\def\gh
abc\def\ij
abc\jk\lm
de
イメージとして、以下のようなツリー構造を構築できればOKです。
ROOT
┗abc
┗def
┗gh
┗ij
┗jk
┗lm
┗de
ツリーですのでルートがあります。上記のフォルダ一覧はルート以下にぶら下げてください。また、同じフォルダにぶら下がっているサブフォルダの名前は重複させてはいけません。
上記のような出力は結果の分かりやすさとしてあった方がいいですが、なければないで構いません。また、ASやJavaFXでグラフィカルな結果を表示するプログラムでも構いませんが、データ構造はちゃんと作ってください。
[ reply ]