The OpenNET Project / Index page

[ новости /+++ | форум | wiki | теги | ]

Массивы и Хэши

   Корень / Программисту и web-разработчику / Perl / Массивы и Хэши

----* Как организовать выборку ключа по условию больше или равно в BerkeleyDB   [обсудить]
  Задача: выбрать запись с ключем большим или равным искомому, т.е. организовать выборку по промежутку значений:
...
[Слишком большой объем текста. Скрыт. Для просмотра см. продолжение
]
 
----* Как получить бинарный дамп хеша или массива на Perl   [обсудить]
 
use Storable;
Запись/чтение дампа в файл.
   store (\%table, 'file');  $hashref = retrieve('file');
   lock_store (\%table, 'file');  $hashref = lock_retrieve('file');
Запись/чтение дампа в ранее открытый файл.
   store_fd (\%table, \*FILE); $hashref = fd_retrieve(\*FILE);
Запись/чтение дампа в скалярную переменную 
(удобно для использования для привязки сложной структуры к ключу в DB_File или BerkeleyDB).
   $hash_dump = freeze (\%table); $hash_ref = thaw($hash_dump);

Если нужно получить дамп в символьном "perl sources"-виде для использования в
eval или print: use Data::Dumper;
 
----* Как сразу выделить память под хэш в Perl до его заполнения.   [комментарии]
 
Определяем, что хэш будет содержать около 100 записей:
  keys( %hash ) = 100;
 
----* Обращение к DB файлам в Perl как к хэшам.   [обсудить]
 
use DB_File;
$db_hashinfo = new DB_File::HASHINFO;
$db_hashinfo->{'cachesize'} =  100000;
$dbobj = tie(%hash, "DB_File", "somefile.db", O_RDWR|O_CREAT, 0644, $db_hashinfo ))||die "Error";
$dbobj->del($key);
$dbobj->sync();
untie %hash;
Для доступа к хранилищам Berkeley DB версии 2,3 и 4 нужно использовать модуль  BerkeleyDB.
 
----* Как вывести содержимое хеша с сортировкой по ключу или данным.   [обсудить]
 
Сортировка по ключу:
    foreach $key (sort keys %hash){ }
Сортировка по данным сопоставленым с ключом:
    foreach $key (sort { $hash{$a} cmp $hash{$b} } keys %hash){ }
Если сортировка осуществляется над строковыми данными используем "cmp", если
над цифровыми - "<=>".
Для сортировки в обратном порядке пишем "reverse sort".
 
----* Как организовать хэш элементами которого являются хэши (хэш хэшей)   [комментарии]
 
%a=(
     "test1" => {
         "TITLE" => "incoming",
         "HEADER" => "Hi"
      },
      "test2" => {
	"TITLE" => "outgoing"
      }
)
$s = $a{"test1"}{"TITLE"};
print "$s\n"; 
 
----* Как организовать массив элементами которого являются массивы   [обсудить]
 
@a=(["a","b","c"],["d","e"],["f"]);
foreach $b (@a){
    foreach $c (@$b){
	print "$c\n";
    }
	print "====\n";
}
$z=$a[1][1];
print "--$z\n";
 
----* Как узнать число элементов массива   [комментарии]
 
@array=();
$n = $#array; # это номер последнего индекса, число записей - scalar @array;
Если $n = -1 - то массив пустой, если $n = 0 - в массиве 1 элемент и т.д.
 
----* Как в качестве значения в ассоциацтивном массиве использовать обычный массив.   [обсудить]
 
%ass=( "login" => ["test", 32, 2]);
Для доступа к элементам массива используем:
@{$ass{"login"}}[0]; # test
@{$ass{"login"}}[1]; # 32
@{$ass{"login"}}[2]; # 2
 
----* Как в Perl получить элемента массива имя которого находится в переменной   [обсудить]
 
Реальный массив:
	%form_test = ('a' => 1);
Переменаня
	$name="test";
Генерируем ссылку на массив:
	$tmp = eval "\\\%form_$name"; 
Вычилсяем хначение элемента массива:
	$key_val = $$tmp{"a"};
 

 Версия для печати





Партнёры:
PostgresPro
Inferno Solutions
Hosting by Hoster.ru
Хостинг:

Закладки на сайте
Проследить за страницей
Created 1996-2024 by Maxim Chirkov
Добавить, Поддержать, Вебмастеру