Я очень часто смотрю на небо,наверное по этому так часто спотыкаюсь...
Пытаюсь создать структуру похожую на дерево, где на верхнем уровне несколько переменных, и от каждой отходят несколько ветвей, от которых в свою очередь тоже отходят несколько ветвей. Причем несколько "родителей" могут относиться к одному и тому_же "листу".

Вопрос в том - какую лучше всего использовать для этого структуру данных в языке Perl?
Пока все мысли не идут дальше hash of arrays, в которых данные будут ключами к очередной hash of arrays.
Есть ли что проще или я изобретаю "велосипед", где он уже существует?


@темы: Вопрос, *nix, Perl, программирование,помощь

Комментарии
01.06.2010 в 10:17

А чем хэши не подходят? :)
04.06.2010 в 18:56

Люди никогда не достигнут совершенства, пока будут оставаться людьми...
В перл воообще кроме хэша и массива ниче нет. Даже, как известно, объект -- это хэш)
04.06.2010 в 21:15

Я очень часто смотрю на небо,наверное по этому так часто спотыкаюсь...
Понятно ... Просто надеялась, что есть что проще структуры hash of hash of arrays
07.06.2010 в 06:23

Люди никогда не достигнут совершенства, пока будут оставаться людьми...
~Marka, нету. это перл. =) этим он и крут. Там можно такое уметь! но всё руками)
07.06.2010 в 06:46

Я очень часто смотрю на небо,наверное по этому так часто спотыкаюсь...
Вроде нашла то, что нужно : @database = ( \%recordOne, \%recordTwo );
www.cs.cf.ac.uk/Dave/PERL/node63.html

Осталось теперь только все это связать с тем что уже есть :alles:
07.06.2010 в 19:29

Люди никогда не достигнут совершенства, пока будут оставаться людьми...
ну массив хешей....
07.06.2010 в 19:55

Я очень часто смотрю на небо,наверное по этому так часто спотыкаюсь...
Теперь другой вопрос.. Как из такой структуры вытаскивать отдельные значения. :hmm:

Пока, если делать запрос простым print (%{$database[0]}->{"Time"}); , то выводится "ARRAY(0x95a3348)".
А если пытаться вылодить через Dumper, то оно_же выглядит как
$VAR6 = [
'-3.440559e-06',
'5.091846e-04',
'-2.146339e-02',
'-3.694172e-01'
];
:hmm:
07.06.2010 в 22:04

Люди никогда не достигнут совершенства, пока будут оставаться людьми...
настоятельно рекомендую ознакомиться с главами:
*ССылки
*Структуры данных: хэш, массив
*Срезы
*Сложные структуры данных.

%{$database[0]}->{"Time"} --- здесь написан какой то бред. опиши структуру нормально, что где храниться.
И смотря что хочется вывести.
07.06.2010 в 22:29

Я очень часто смотрю на небо,наверное по этому так часто спотыкаюсь...
Структура:
-------------------------------------------------
Stage#1

Программа открывает фаил и считывает данные по столбикам.
Для каждого толбика (всем элементам столбика) идет цикл, который:
1) создает 2 хеша, в каждом из которых 3 "категории" = "Time", "Size","Bitrate".
2) В каждую из категорий записывается массив из 4 цифр
3) имя для этих самыx хешей выбирается в зависимости от столбика, расположения itd....

то есть в цикле есть такая запись для формирования хеша:
%{$z}->{$y}=[ @values ];
(гдe $z - содержит нужное на данном этапе имя хеша , $y - содержит имя категории = "Time", "Size" or "Bitrate"), a @values = массив из 4 цифр)

На этом этапе все формируется с правильными именами.
Если попробовать сделать

print "%cropMJPG"; # по конкретному имени хеша

получаю: (те самые три категории, но в них почему-то не массивы из 4 цифр, а что-то страшное судя по числам в скобочках)
TimeARRAY(0x925c118)SizeARRAY(0x925c168)BitrateARRAY(0x925c208)

--------------------------------------------------
Stage#2
после того, как все хеши сформированы из них формируется массив (идея сего действа такая > @database = ( \%recordOne, \%recordTwo );).
вот как это делаю

for($j=0;$j<@all_filters;$j++)

{
$zz=$all_filters[$j]; # здесь в мaссиве хранятся имена хешей
push(@database,\%$zz);
}
______________________________

вот теперь использую
%{$database[0]}->{"Time"}

По идее она должна вывести то, что хранится в хеше, расположенном в $database[0], в категории "Time".
Но она вместо массива из 4 цифр выдает ARRAY(0x95a3348)
---------------------------------------
10.06.2010 в 16:57

Я очень часто смотрю на небо,наверное по этому так часто спотыкаюсь...
Все - разобралась . :crzfan:

Чтобы добраться до array , который сидит в одной из категорий внутри hash надо применять вот такую конструкцию:
(%{$name}->{"Time"}[$kk])
(где в $name - сидит имя хеша, "Time " нужная категория, a $kk - нoмер нужной позиции и array)