У меня есть массив путей, массив = [
'A.txt',
'Б / a.txt',
'А / a.txt',
'А / г / a.txt'
]
Мне нужно создать древовидную структуру (для плагина jTree), но сначала она должна быть отсортирована по папкам (в алфавитном порядке), а затем по листам (в алфавитном порядке).
Сортированная древовидная структура с приведенным выше примером будет выглядеть так:
РЕДАКТИРОВАТЬ: Я собираюсь построить упорядоченные списки и элементы списка в виде дерева HTML, где каждый узел является LI, а если это папка, то он имеет другой UL в качестве родственного элемента. Это один из форматов, который плагин jTree принимает в качестве входных данных. Структура для приведенного выше примера:
<ul>
<li class="folder">a</li>
<ul>
<li class="folder">z</li>
<ul>
<li class="leaf">a.txt</li>
</ul>
</ul>
<li class="folder">b</li>
<ul>
<li class="leaf">a.txt</li>
</ul>
<li class="leaf">a.txt</li>
</ul>
Это создаст древовидную структуру как хеш-дерево:
array = ["home", "about", "about/history", "about/company", "about/history/part1", "about/history/part2"]
auto_hash = Hash.new{ |h,k| h[k] = Hash.new &h.default_proc }
array.each{ |path|
sub = auto_hash
path.split( "/" ).each{ |dir| sub[dir]; sub = sub[dir] }
}