Ruby 从路径组件构造文件树
我有一组文件路径组件,如下所示:Ruby 从路径组件构造文件树,ruby,ruby-on-rails-3,Ruby,Ruby On Rails 3,我有一组文件路径组件,如下所示: [ ['some', 'dir', 'file.txt'], ['other', 'folder', 'here.txt'], ['this', 'one', 'is', 'deeper', 'file.txt'], ['some', 'dir', 'second.txt' ] 因此,数组包含数组,每个数组都包含指向文件的路径组件。内部数组中的最后一个元素始终是文件本身,前面的元素是指向该文件的目录 我想弄清楚的是如何转换上述数据,以便使用和标记轻
[ ['some', 'dir', 'file.txt'],
['other', 'folder', 'here.txt'],
['this', 'one', 'is', 'deeper', 'file.txt'],
['some', 'dir', 'second.txt'
]
因此,数组包含数组,每个数组都包含指向文件的路径组件。内部数组中的最后一个元素始终是文件本身,前面的元素是指向该文件的目录
我想弄清楚的是如何转换上述数据,以便使用
和
标记轻松生成文件树,从而使文件夹相互嵌套,同一文件夹中的文件显示在一起。全部按字母顺序排列
从上面我想生成以下内容。文件本身必须是指向该文件路径的链接:
<ul>
<li>some/
<ul>
<li>dir/
<ul>
<li><a href="some/dir/file.txt">file.txt</a></li>
<li><a href="some/dir/second.txt">second.txt</a></li>
</ul>
</li>
</ul>
</li>
<li>other/
<ul>
<li>folder/
<ul>
<li><a href="other/folder/here.txt">here.txt<a/></li>
</ul>
</li>
</ul>
</li>
<li>this/
<ul>
<li>one/
<ul>
<li>is/
<ul>
<li>deeper/
<ul>
<li><a href="this/one/is/deeper/file.txt">file.txt</a></li>
</ul>
</li>
</ul>
</li>
</ul>
</li>
</ul>
</li>
</ul>
- 一些/
- 迪尔/
- 其他/
- 文件夹/
谢谢,如果您有任何想法,我将不胜感激。粗略概述;尽可能简单(也就是说,不要让事情变得简单:) 产出:
{"some"=>{"dir"=>{"file.txt"=>"file.txt", "second.txt"=>"second.txt"}},
"other"=>{"folder"=>{"here.txt"=>"here.txt"}},
"this"=>{"one"=>{"is"=>{"deeper"=>{"file.txt"=>"file.txt"}}}}}
创建列表基本上是相同的过程;在散列键上递归。当一个哈希值不是另一个哈希值时,您处于最后一级。您可能还希望按名称和/或类型进行排序,例如,将目录(散列的键值)放在第一位,等等
你可以玩很多游戏,包括把它转换成几行代码,再加上像deep_merge这样的gems,以减少你必须手动完成的繁忙工作
这也不会进行任何“健全性检查”以确保数据不是病态的,例如,您可以构造一个数组,将文件名转换为目录,删除带有文件名的目录,等等--这是留给读者的练习。非常感谢。这绝对是一个很好的起点。我很感激。
{"some"=>{"dir"=>{"file.txt"=>"file.txt", "second.txt"=>"second.txt"}},
"other"=>{"folder"=>{"here.txt"=>"here.txt"}},
"this"=>{"one"=>{"is"=>{"deeper"=>{"file.txt"=>"file.txt"}}}}}