В Perl, как я могу преобразовать массивы, которые я читаю из базы данных, в хеш? - PullRequest
3 голосов
/ 21 октября 2010

По сути, я запрашиваю базу данных и мне нужно преобразовать результирующий массив в хеш.

Я запрашиваю базу данных следующим образом

my $sth = $dbw->prepare($sql);
while (@rows = $sth->fetchrow_array()) {  
...
...
}

Теперь мне нужно создатьхеш такой, что row [0] - это ключ, а row [1], row [2], row [3] - значения.Для каждой прочитанной записи должен быть сгенерирован новый хэш-ключ и установлены соответствующие значения

Если мои таблицы выглядят как

abc 2.3 2.4 2.5
def 3.2 3.3 3.4
ijk 4.5 4.6 4.7

Первая запись читается, а abc - это ключ и цифрызначения ... так далее

Ответы [ 3 ]

7 голосов
/ 21 октября 2010

Вы также можете взглянуть на selectall_hashref .

$hash_ref = $dbh->selectall_hashref($statement, $key_field);
6 голосов
/ 21 октября 2010
my %hash;

while (my @fields = $sth->fetchrow_array()) {  
    $hash{$fields[0]} = [ @fields[1..$#fields] ];
}
4 голосов
/ 21 октября 2010
my %mealsizes;
my $sth = $dbw->prepare($sql);
while (@columns = $sth->fetchrow_array()) {  
  my $dayname = shift @columns;
  $mealsizes{$dayname} = [@columns];
}

Вот иллюстрация создания и использования arrayref.

#!/usr/bin/perl
#
use strict;
use warnings;

my %h;
while (<DATA>) {
  my @columns = split;
  my $k = shift @columns;
  $h{$k} = [@columns];
}

for my $k (sort keys %h) {
  print "$k => ", join(', ', @{$h{$k}}), "\n";
}

__DATA__
abc 2.3 2.4 2.5
def 3.2 3.3 3.4
ijk 4.5 4.6 4.7
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...