どのようにパスのハッシュPerl

課題です。 のコードは、Perlプログラムがハッシュ %h. このハッシュがペアの値です。 として安心してご利用いただけ、すべてのハッシュ項目を行動しています。

徒歩のハッシュを使用 foreach

多くのも便利な方法をバイパスのハッシュを使用 foreach. この例のコード:

▶ Run
#!/usr/bin/perl

my %h = (
    a => 1,
    b => 20,
    asdf => 'Hello',
);

foreach my $key (keys %h) {
    print "$key - $h{$key}\n";
}

では極めて簡単です。 まず最初に作成のハッシュ %hによ るペアの値です。 次にくるのはサイクルです。 使用 keys %h が得られたリストのハッシュキー(この例では、線 'a', 'b''asdf'). キー文字列に書き込まれ変 $key に実ループの身体、そして $key fits以下のハッシュキー と実行ループの車体で、このすべての鍵となります。

保存されるこのコードをファイル script.pl および実行しま perl script.plの画面が表示されるセットのペアの値 に含まれるハッシュ:

b - 20
asdf - Hello
a - 1

ハッシュが順序付けの値です。 との結論を明確に可視の順序で引っ込み思案だった の要素のハッシュと一致しないっていった定義されたプログラムのコードです。 ま行 このスクリプトは複数の要素の出力は変化します。 keys %h を返しますキーのリスト ハッシュ任意の順です。 が必要な場合は注文したい同じ、たとえば、利用できる ソート foreach my $key (sort keys %h) {.

パスのハッシュを使用 while および each

を回避する別の方法は全体のハッシュを用いてループ while のキーワード each. こちらはコード る作品も前の例:

▶ Run
#!/usr/bin/perl

my %h = (
    a => 1,
    b => 20,
    asdf => 'Hello',
);

while (my ($key, $value) = each %h) {
    print "$key - $value\n";
}

each %h のリストを返します二つの要素のハッシュキーとそれに対応する値です。 全く同じ 場合 keyseach を返しますペアの値が定義されていない。 異なるのと同じ のプログラムのペアを異なる。

して割り当てる値を返 each に変数です。 each に記憶するペアのハッシュ与えられた オリジナルポストカード利用を返します異なると値のペアになっています。 これまで each 戻らないすべてのペアを、その空のリストを返却します. が each を返しますカップルの値は、実体 while サイクルを回の場合、空のリストを返します サイクル whileが完了します。

の値を変更するハッシュ

使用時 foreach サイクル keys %h 実行されます。 使用時 whileサイクル each は各なります。

延長する前の問題ではありませんのみを表示すべての要素のハッシュで置換します。 になっていま 不使用時の foreachkeys:

▶ Run
#!/usr/bin/perl

use Data::Dumper;

my %h = (
    a => 1,
    b => 20,
    asdf => 'Hello',
);

foreach my $key (keys %h) {
    print "$key - $h{$key}\n";
    $h{ $key . $key } = $h{$key};
    delete $h{$key};
}

print Dumper \%h;

の出力はプログラム:

asdf - Hello
a - 1
b - 20
$VAR1 = {
          'bb' => 20,
          'aa' => 1,
          'asdfasdf' => 'Hello'
        };

この値は管理画面より変更可能ですくするために使用され each:

▶ Run
#!/usr/bin/perl

use Data::Dumper;

my %h = (
    a => 1,
    b => 20,
    asdf => 'Hello',
);

while (my ($key, $value) = each %h) {
    print "$key - $value\n";

    # error!
    $h{ $key . $key } = $value;
    delete $h{$key};
}

print Dumper \%h;

を実行するとき、このプログラムの画面が表示されるようなもの:

Use of each() on hash after insertion without resetting hash iterator results in undefined behavior at script.pl line 11.
Use of each() on hash after insertion without resetting hash iterator results in undefined behavior at script.pl line 11.
Use of each() on hash after insertion without resetting hash iterator results in undefined behavior at script.pl line 11.
Use of each() on hash after insertion without resetting hash iterator results in undefined behavior at script.pl line 11.
b - 20
bb - 20
bbbb - 20
asdf - Hello
$VAR1 = {
          'asdfasdf' => 'Hello',
          'bbbbbbbb' => 20,
          'a' => 1
        };

eachが 返される値ペアからのハッシュ、その後変更のハッシュ. は、以下の繰り返し処理のループ eachを返します カップルのハッシュ、使うことができれば追加されます。

ここでは、バイパスのハッシュ変更する必要が利用する必要があり foreach および keys. 利用の場合 whileeach プログラムが正しく動作しません。

関連する話題

その他の記事