Возможно вы искали: 'Kung-Fu Live'

May 15 2025 18:28:47
  • Как сделать 8Gamers.Ru домашней страницей?
  • Игры
    • База данных по играх
    • Игровые новости
    • Игровая индустрия
    • Обзоры на игры
    • Прохождения игр
    • Гайды к играм
    • Превью о играх
    • Игровые тизеры
    • Игровые арты
    • Игровые обои
    • Игровые скриншоты
    • Игровые обложки
    • Игровые трейлеры
    • Игровое видео
    • Вышедшие игры
    • Ближайшие релизы игр
  • Кино и ТВ
    • База данных по кино
    • Статьи о кино
    • Постеры
    • Кадры из кино
    • Кино трейлеры
    • Сегодня в кино
    • Скоро в кино
  • Комиксы и манга
    • Манга по алфавиту
    • База данных по комиксах
    • Читать онлайн комиксы
    • Читать онлайн манга
    • База персонажей
  • Читы и коды
    • Чит-коды для PC игр
    • Чит-коды для консольных игр
    • Трейнеры
    • Коды Game Genie
  • Моддинг
    • Модификации
    • Карты к играм
    • Программы для моддинга
    • Статьи о моддинге
  • Геймдев
    • Всё о создании игр
    • Список движков
    • Утилиты в помощь игроделу
    • Конструкторы игр
    • Игровые движки
    • Библиотеки разработки
    • 3D-модели
    • Спрайты и тайлы
    • Музыка и звуки
    • Текстуры и фоны
  • Рецензии
    • Игры
    • Кино
    • Аниме
    • Комиксы
    • Мангу
    • Саундтреки
  • Саундтреки
    • Лирика
  • Файлы
    • Патчи к играм
    • Русификаторы к играм
    • Сохранения к играм
    • Субтитры к кино
  • Медиа
    • Видео
    • Фото
    • Аудио
    • Фан-арты
    • Косплей
    • Фото с виставок
    • Девушки из игр
    • Рисунки
    • Рисуем онлайн
    • Фотохостинг
  • Юмор
    • Анекдоты
    • Афоризмы
    • Истории
    • Стишки и эпиграммы
    • Тосты
    • Цитаты
  • Флеш
    • Азартные
    • Аркады
    • Бродилки
    • Гонки
    • Для девочек
    • Для мальчиков
    • Драки
    • Квесты
    • Леталки
    • Логические
    • Мультфильмы
    • Открытки
    • Приколы
    • Разное
    • Спорт
    • Стратегии
    • Стрелялки
Статистика

Статей: 87772
Просмотров: 96111483
Игры
Injustice:  Gods Among Us
Injustice: Gods Among Us
...
Dark Souls 2
Dark Souls 2
Dark Souls II - вторая часть самой хардкорной ролевой игры 2011-2012 года, с новым героем, сюжето...
Battlefield 4
Battlefield 4
Battlefield 4 - продолжение венценосного мультиплеер-ориентированного шутера от первого ли...
Кино
Steins;Gate
Steins;Gate
Любители японской анимации уже давно поняли ,что аниме сериалы могут дать порой гораздо больше пи...
Ку! Кин-дза-дза
Ку! Кин-дза-дза
Начинающий диджей Толик и всемирно известный виолончелист Владимир Чижов встречают на шумной моск...
Обзоры на игры
• Обзор Ibara [PCB/PS2] 18357
• Обзор The Walking ... 18801
• Обзор DMC: Devil M... 19879
• Обзор на игру Valk... 15877
• Обзор на игру Stars! 17764
• Обзор на Far Cry 3 17948
• Обзор на Resident ... 16024
• Обзор на Chivalry:... 17508
• Обзор на игру Kerb... 17981
• Обзор игры 007: Fr... 16619
Превью о играх
• Превью к игре Comp... 17960
• Превью о игре Mage... 14464
• Превью Incredible ... 14721
• Превью Firefall 13479
• Превью Dead Space 3 16334
• Превью о игре SimC... 14730
• Превью к игре Fuse 15442
• Превью Red Orche... 15542
• Превью Gothic 3 16343
• Превью Black & W... 17354
Главная » Статьи » Разное » Хэш хэшей в Perl - вложенные массивы и хеши (perl hash)

Хэш хэшей в Perl - вложенные массивы и хеши (perl hash)

Ключевые слова: perl, hash, (найти похожие документы)

Date: Wed, 17 Apr 2002 11:39:00 +0400
From: Bulat Ziganshin <Bulat.Ziganshin@p126.f4.n5093.z2.fidonet.org>
Newsgroups: fido7.ru.perl
Subject: Хэш хэшей в Perl - вложенные массивы и хеши

VP>> my %hash2 = qw(d 3 e 4);
VP>> $hash1{'c'} = %hash2;

AM> А %hash2 можно динамически создавать по мере появления новых ключей у
AM> %hash1?

не всегда :) есть perldsc, вот его кратокое изложение

=== Cut ===
ну очень краткое :) итак, как работать в perl с вложенными массивами и хешами

до perl5 в перле было всего три (основных) типа данных и имя переменной
полностью определяло, данные какого типа она хранит

$x - хранит ЗHАЧЕHИЕ (число или строку)
@x - хранит список ЗHАЧЕHИЙ
%x - хранит список пар строка->ЗHАЧЕHИЕ

в perl5 всё осталось также, только понятие ЗHАЧЕHИЯ было расширено - теперь это
может быть ССЫЛКА на массив или хеш. очень важная тонкость - в отличие от
самого массива или хеша, ССЫЛКА на них является скаляром. вот смотрите:

@a = (1,2);
$a = [ (1,2) ]; # квадратные скобки превращают массив/хеш в ССЫЛКУ на массив
%b = (1=>2);
$b = { (1=>2) }; # фигурные скобки превращают массив/хеш в ССЫЛКУ на хеш

обратите внимания - круглые скобки используются только для группировки, а
квадратные и фигурные являются ОПЕРАТОРОМ, превращающим СОСТАВHОЕ ЗHАЧЕHИЕ в
ССЫЛКУ. Внутри []/{} круглые скобки обычно опускают, я привёл их лишь для
удобства понимания единственной существенной разницы между этими действиями

теперь несложно сконструировать массив массивов:
@c = ( [1,2], [2], [3,4,5] );

на самом деле, конечно, это массив ССЫЛОК на массивы. но к его элементам можно
обращаться, не задумываясь об этом - $c[0][1]

или создадим хеш хешей:
%d = ( C=> {Speed=>Good, Readability=>Bad}, Perl=>{Speed=>hmmm} );

опять же, $d{Perl}{Speed} будет работать


если же вы и внешние круглые скобки замените на []/{}, то опять получите
скаляр, и его надо будет присваивать тоже скаляру:

$e = [ [1,2], [3,4] ]; # ССЫЛКА на массив, состоящий из ССЫЛОК на массивы

поскольку перловые функции обычно ожидают "развёрнутый" массив/хеш,
пользоваться таким скаляром будет неудобно. да и к элементам его доступ
неочевиден - $e->[0][1]. собственно, "->" - оператор разыменования ССЫЛОК, и
для доступа к элементам @c он тоже используется, но перл вставляет его неявно:
$c[0][1] эквивалентно $c[0]->[1]. То есть, $c[0] возвращает нам ССЫЛКУ на
массив, стрелка её разыменовывает (превращает ССЫЛКУ в массив) и затем второе
индексирование "[1]" возвращает нам элемент этого массива

наверно, уже понятно, что $e->[0][1] на самом деле работает как $e->[0]->[1]:
разыменовываем, берём элемент, снова разыменовываем, и снова берём элемент. с
массивами хешей, и со сколь угодно более сложными структурами данных всё точно
также. разумеется, их можно произвольно смешивать:

$a = [ 1, [2,3], {a=>b}, [[4,5]] ];
1 == $a->[0]
2 == $a->[1][0]
b == $a->[2]->{a} == $a->[2]{a}
5 == $a->[3][0][1]


вот, в общем-то, и всё. добавлю несколько дополнительных замечаний

операторы []/{} создают КОПИИ переданных им ЗHАЧЕHИЙ. если вы хотите вместо
этого получить ССЫЛКУ на ТЕ ЖЕ данные, используйте оператор "". кстати, эти
операторы можно комбинировать:

@a = (1,2);
@b = (3,4);
@c = ( [@a], [@b] ); # @c содержит (ССЫЛКИ на) копии массивов a и b
@d = ( @a, @b ); # @d содержит ССЫЛКИ на массивы a и b
@e = ( [@a, @b], [[@a], [@b]] );
@e - трёхмерный массив,
$e[0][0][$i] эквивалентно $a[$i]
$e[0][1][$i] эквивалентно $b[$i]
$e[1][0][$i] содержат копии $a[$i]
$e[1][1][$i] содержат копии $b[$i]

т.е. теперь присваивания $a[$i] изменят также ЗHАЧЕHИЯ $d[0][$i] и $e[0][0][$i]
и наоборот. ссылки полезны при передаче сложных структур данных в функции (чтоб
перл не разворачивал всё в один бессмысленный список) и при манипуляциях со
связными структурами данных, типа деревьев и связных списков

не используйте операцию получения ссылки без необходимости, поскольку перл
возвращает ССЫЛКУ не на данные как таковые, а на переменную, и в дальнейшем что
бы ни присвоили этой переменной - вы увидите это по своей ссылке:

@a = (1,2);
$ref = @a;
@a = (3,4);
# теперь $ref указывает на новое содержимое @a


второе замечание - многие встроенные операторы перла рассчитаны на то, что им
на вход подадут переменную-массив или хеш. но никак не ССЫЛКУ. для того, чтобы
превратить одно в другое, используются конструкции @{...} и %{...}:

push @{$c[0]}, 0; # $c[0] - ССЫЛКА на массив, @{$c[0]} - сам массив

%d = ( C=> {Speed=>Good, Readability=>Bad}, Perl=>{Speed=>hmmm} );
print keys %{$d{C}} # $d{C} - ССЫЛКА на хеш, %{$d{C}} - сам хеш

остатнее читайте в perldsc. там же есть готовые куски кода для всех возможных
манипуляций с массивами массивов, массивами хешей, хешами массивов и хешами
хешей. от себя посоветую использовать модуль Data::Dumper для изучения
результатов своего творчества :)

use Data::Dumper; # for exporting values from Perl to Ruby
#$Data::Dumper::Indent = 0; # one-line output
#$Data::Dumper::Terse = 1; # print no assignments to $VARn
#$Data::Dumper::Useqq = 1; # quote unprintable chars
#$Data::Dumper::Deepcopy = 1; # ??? are we really need this? ;)

print Dumper($a), "n", Dumper(@e), "n", Dumper(%d);
=== Cut ===

Bulat, mailto:bulatz-AT-fort.tatarstan.ru, ICQ: work 15872722, home 11849833

... Иногда для того, чтобы изменить свое восприятие мира,
... люди пытаются изменить сам мир
4232 Прочтений •  [Хэш хэшей в Perl - вложенные массивы и хеши (perl hash)] [08.05.2012] [Комментариев: 0]
Добавил: Ukraine Vova
Ссылки
HTML: 
[BB Url]: 
Похожие статьи
Название Добавил Добавлено
• Хэш хэшей в Perl - вложенные массив... Ukraine Vova 08.05.2012
Ни одного комментария? Будешь первым :).
Пожалуйста, авторизуйтесь для добавления комментария.

Проект входит в сеть сайтов «8Gamers Network»

Все права сохранены. 8Gamers.NET © 2011 - 2025

Статьи
Рецензия на Pressure
Рецензия на Pressure
Чтобы обратить на себя внимание, начинающие маленькие разработчики, как правило, уходят в жанры, ...
Рецензия на Lost Chronicles of Zerzura
Рецензия на Lost Chron...
Игры, сделанные без любви и старания, похожи на воздушный шар – оболочка есть, а внутри пусто. Lo...
Рецензия на The Bridge
Рецензия на The Bridge
«Верх» и «низ» в The Bridge — понятия относительные. Прогуливаясь под аркой, можно запросто перей...
Рецензия на SimCity
Рецензия на SimCity
Когда месяц назад состоялся релиз SimCity, по Сети прокатилось цунами народного гнева – глупые ош...
Рецензия на Strategy & Tactics: World War 2
Рецензия на Strategy &...
Название Strategy & Tactics: World War II вряд ли кому-то знакомо. Зато одного взгляда на ее скри...
Рецензия на игру Scribblenauts Unlimited
Рецензия на игру Scrib...
По сложившейся традиции в информационной карточке игры мы приводим в пример несколько похожих игр...
Рецензия на игру Walking Dead: Survival Instinct, The
Рецензия на игру Walki...
Зомби и продукция-по-лицензии — которые и сами по себе не лучшие представители игровой биосферы —...
Обратная связь | RSS | Донейт | Статистика | Команда | Техническая поддержка