уровен вложенности элемента perl

программирование программы perl

Подскажите как в массив хэшей {id} {pid} древовидной структуры, добавить для каждого элемента уровень вложенности?

Примечание:
нет, как и так понятно, массив хэшей - слепок с базы. База рекурсию не поддержитвает. Необходимо добавить поле "уровень", вот и хочу сделать это с помощью перла, а потом добавить в базу. никакой сложный pid не нужен

Примечание:
в перле имеем
@dirs

в нём соответственно
$dirs[$i]{id}
$dirs[$i]{pid}

i порядка полляма

Примечание:
то есть как сделать ещё 1 хэш к массиву - $dirs[$i]{level}

саму функцию прошу)

нашел нечто...

sub t {
return $_[1] if ref $_[0] ne 'ARRAY';
t($_[0]->[0], ++$_[1]);
}

но не догоняю...

Примечание:
id - id элемента
pid - id родителя

аськой не пользуюсь...
скайп такой же как и ник тут...

данное дерево имеет название Adjacency List. Быстрое на запись... но для всяких нужд потребовалось знать уровень каждого элемента.

Примечание:
был бы паризнателет=)

Примечание:
прастите, только я не понимаю, зачем всё перегонять в хэш... мне потом данные в базу заносить...
Ответы:
вы бы структуру с помощью Data::Dumper показали бы, а то недопонятно...
А вообще, первая идея - обойти рекурсивно и добавить таки.
1. Обдумать действительно ли вам нужно то, что вы просите.
2. {pid} сделать сложным элементом, который содержит pid и, собственно, уровень вложенности, который парсить простым регулярным выражением.


13 лет назад

RPI.su - самая большая русскоязычная база вопросов и ответов. Наш проект был реализован как продолжение популярного сервиса otvety.google.ru, который был закрыт и удален 30 апреля 2015 года. Мы решили воскресить полезный сервис Ответы Гугл, чтобы любой человек смог публично узнать ответ на свой вопрос у интернет сообщества.

Все вопросы, добавленные на сайт ответов Google, мы скопировали и сохранили здесь. Имена старых пользователей также отображены в том виде, в котором они существовали ранее. Только нужно заново пройти регистрацию, чтобы иметь возможность задавать вопросы, или отвечать другим.

Чтобы связаться с нами по любому вопросу О САЙТЕ (реклама, сотрудничество, отзыв о сервисе), пишите на почту [email protected]. Только все общие вопросы размещайте на сайте, на них ответ по почте не предоставляется.