Автор Тема: Массив хешей  (Прочитано 3404 раз)

0 Пользователей и 1 Гость просматривают эту тему.

Оффлайн kosm

  • Фанат форума
  • Постоялец
  • ***
  • Сообщений: 110
  • +0/-0
  • 0
    • Просмотр профиля
    • http://japanretro.tk
Массив хешей
« : 09 Сентября 2003, 18:14:37 »
Ребят, подскажите что не так делаю?
Задача положить в массив хеши, и потом соответственно их отсель вытащить.
Кладу так:
push (@Log, %data);
Вытаскиваю так:
%data = $Log[$i];

Что я не так делаю?

Оффлайн ondr

  • Модератор
  • Глобальный модератор
  • Старожил
  • *****
  • Сообщений: 440
  • +0/-0
  • 0
    • Просмотр профиля
Массив хешей
« Ответ #1 : 09 Сентября 2003, 18:30:49 »
push @log, \\%data;
...
%data = %{$log[$i]};

а лучше так:

push @log, {%data};
...
%data = %{$log[$i]};
0 OK, 0:1

Оффлайн ondr

  • Модератор
  • Глобальный модератор
  • Старожил
  • *****
  • Сообщений: 440
  • +0/-0
  • 0
    • Просмотр профиля
Массив хешей
« Ответ #2 : 09 Сентября 2003, 18:33:20 »
а можно и вытаскивать только нужные данные по ключам:
$val = $log[$i]->{$key};

где: $key - ключ, $val - значение
0 OK, 0:1

Оффлайн Phoinix

  • RW
  • Ветеран
  • *****
  • Сообщений: 1097
  • +0/-0
  • 2
    • Просмотр профиля
    • http://phoinix.ucoz.ru
Массив хешей
« Ответ #3 : 09 Сентября 2003, 18:48:29 »
kosm
Если ты хочешь, что бы в каждой ячейке массива был свой массив, то так не получится, все ячейки массива %data, становятся отдельными ячейками массива @log, и соответсвенно когда ты выбираешь одну ячейку @log ты получаешь одну ячейку %data

если уж так надо, то:

$mass = join(\'|\',%data);
push (@Log, $mass);

%data = split(/\\|/,$Log[$i]);

т.е. массив преобразуешь в скаляр, а потом обратно

Оффлайн mike

  • ProPerl\'er
  • Старожил
  • ****
  • Сообщений: 435
  • +0/-0
  • 2
    • Просмотр профиля
    • http://
Массив хешей
« Ответ #4 : 09 Сентября 2003, 18:49:10 »
kosm
Чтобы лучше понять, как что делается, почитай
perldoc perllol
perldoc perlref
[ основной браузер когда-то был, теперь попробуй разберись =]

Оффлайн ondr

  • Модератор
  • Глобальный модератор
  • Старожил
  • *****
  • Сообщений: 440
  • +0/-0
  • 0
    • Просмотр профиля
Массив хешей
« Ответ #5 : 09 Сентября 2003, 19:11:55 »
Цитировать
Phoinix:
если уж так надо, то:

$mass = join(\'|\',%data);
push (@Log, $mass);

%data = split(/\\|/,$Log[$i]);

т.е. массив преобразуешь в скаляр, а потом обратно


интересно, что будет если вдруг в хэше %data уже есть символы \'|\' ? :)
0 OK, 0:1

Оффлайн Phoinix

  • RW
  • Ветеран
  • *****
  • Сообщений: 1097
  • +0/-0
  • 2
    • Просмотр профиля
    • http://phoinix.ucoz.ru
Массив хешей
« Ответ #6 : 09 Сентября 2003, 19:13:09 »
ondr
символ \'|\' - для примера

Оффлайн kosm

  • Фанат форума
  • Постоялец
  • ***
  • Сообщений: 110
  • +0/-0
  • 0
    • Просмотр профиля
    • http://japanretro.tk
Массив хешей
« Ответ #7 : 09 Сентября 2003, 19:19:18 »
Огромное всем спасибо! Теперь все понятно...

Phoinix
Ага, как раз надо было что бы в кажной ячейке массива был свой хеш.

СПАСИБО ЕЩЕ РАЗ ВСЕМ!!!

 

Sitemap 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28