どのようにハッシュの配列Perl?
-
09-06-2019 - |
質問
いたい書けない"DBQuery"機能を含んでいナを送るSQLステートメントを受け、配列のハッシュ、すなわちは、recordset.しかし、私はラインの課題とPerlの書式は(そも奇数ポインタースーパーコンピュータを用いた問題)を防止から梱包の情報からのハッシュをしているところからのデータベースです。サンプルコードを以下に示します。
のデータを取得できます"ジム"のハッシュ内の配列をこの文:
print $records[$index]{'firstName'}
を返します"-ジム-"
だいコピーのハッシュ記録の配列に独自のハッシュ変数は、その不思議なアクセスのデータとなるハッシュ:
%row = $records[$index];
$row{'firstName'};
を返します""(空白)
ここではサンプルコードの問題です。のお役に立てるようです。
my @records = (
{'id' => 1, 'firstName' => 'Jim'},
{'id' => 2, 'firstName' => 'Joe'}
);
my @records2 = ();
$numberOfRecords = scalar(@records);
print "number of records: " . $numberOfRecords . "\n";
for(my $index=0; $index < $numberOfRecords; $index++) {
#works
print 'you can print the records like this: ' . $records[$index]{'firstName'} . "\n";
#does NOT work
%row = $records[$index];
print 'but not like this: ' . $row{'firstName'} . "\n";
}
解決
入れ子のデータ構造体にハッシュ 参考, ではなく、ハッシュ.
# Will work (the -> dereferences the reference)
$row = $records[$index];
print "This will work: ", $row->{firstName}, "\n";
# This will also work, by promoting the hash reference into a hash
%row = %{ $records[$index] };
print "This will work: ", $row{firstName}, "\n";
だった深いPerlのデータ構造、利益からの印刷を用いて データ::ダンパー 印刷で人間が読む(Perl-構文解析可能な)形式です。
他のヒント
配列のハッシュになっハッシュを含まな 参考文献 めのハッシュ.このライン:
%row = $records[$index];
付け%列と入力します。鍵は、 スカラー:
{'id' => 1, 'firstName' => 'Jim'},
を参照のハッシュの値は空白にします。
何をしたいです
$row = $records[$index];
$row->{'firstName'};
釈:
$row = %{$records[$index];}
$row{'firstName'};
その他たハッシュvs hashrefs.一つのものを感じるべきではなく平和的話し合いを行い、おDBQuery機能のようでいいというのは、とても部分に内蔵していますDBI?かご質問に正解でしようとしているこのようなものを再現 selectall_arrayref:
このユーティリティメソッドを併せ持"準備"、"execute"、"fetchall_arrayref"を単一ます。を返しますへの参照を格納する配列への参照の配列(またはハッシュ、下記を参照してください)各行のデータを取得.
追加の回答、またしなければなりません、いつも、いつもあり、"常に"es)を使用利用"警告"上部のコードです。またいいの警告"参照の見所もサイズのリストが期待で-eライン1."
だったの配列はhashrefではなく、ハッシュ.だが理解できないようなこのコンセプトそのも価値の読み込み perlref ます。
のハッシュだけ
my %hash = %{@records[$index]};
例えば.
my @records = (
{'id' => 1, 'firstName' => 'Jim'},
{'id' => 2, 'firstName' => 'Joe'}
);
my %hash = %{$records[1]};
print $hash{id}."\n";
が.なんなのか、なぜいいのない限り、そのための学術目的での利その他いかfetchall_hashref/fetchall_arrayref、DBIモジュールを使うクラス::DBI.
も良いperlムを利用する
for my $rowHR ( @records ) { my %row = %$rowHR; #or whatever... }
反復処理の一覧です。