ハッシュ(連想配列)は数値で表されるインデックスではなく、数値・文字列などのキーから値を参照する特殊な配列です。 ハッシュを宣言する場合は「%ハッシュ名」とします。 要素を追加する場合は、ソースコードのように「キー => 値」とします。
#!c:\perl\bin\perl.exe # ハッシュ %santakutai = ( "uni" => "soba", "tempura" => "udon", "tekkadon" => "rahmen" ); print $santakutai{"uni"}, "\n"; print $santakutai{"tempura"}, "\n"; print $santakutai{"tekkadon"}, "\n";"soba", "tempura" => "udon", "tekkadon" => "rahmen" ); print $santakutai{"uni"}, "\n"; print $santakutai{"tempura"}, "\n"; print $santakutai{"tekkadon"}, "\n";]]>
soba udon rahmen
次の例のように、キーに数値を指定しても構いません。
#!c:\perl\bin\perl.exe # キーに数値を指定した例 %numbers = ( 298 => "nikyuppa", 503 => "gomarusan", 110 => "hyakutohban" );"nikyuppa", 503 => "gomarusan", 110 => "hyakutohban" );]]>
nikyuppa gomarusan hyakutohban
空のハッシュを作成しておき、後から要素を追加するということもできます。
#!c:\perl\bin\perl.exe # 空のハッシュを作成 %numbers = (); # 要素を追加 $numbers{119} = "shoubou"; $numbers{911} = "rescue"; print $numbers{119}, "\n"; print $numbers{911}, "\n";
shoubou rescue
ハッシュに対して列挙を行うには、whileとeachを使用します。 この場合、eachによってキーと値のペアを配列を受け取ります。
#!c:\perl\bin\perl.exe # ハッシュとwhile, each %santakutai = ( "uni" => "soba", "tempura" => "udon", "tekkadon" => "rahmen" ); while ( ( $name, $food ) = each ( %santakutai ) ) { print $name, " said ", "'", $food, "'\n"; }"soba", "tempura" => "udon", "tekkadon" => "rahmen" ); while ( ( $name, $food ) = each ( %santakutai ) ) { print $name, " said ", "'", $food, "'\n"; }]]>
tekkadon said 'rahmen' uni said 'soba' tempura said 'udon'
keysやvaluesを用いると、ハッシュで使用されているキー、値の一覧を配列として取得することができます。
#!C:\Perl\bin\Perl.exe # ハッシュ作成 %hash = ( "uni" => "100yen", "tempura" => "200yen", "tekkadon" => "500yen" ); # 列挙 while ( ( $key, $value ) = each( %hash ) ) { print "$key : $value\n"; } print "\n"; # キーの配列を取得 @keys = keys( %hash ); print "Keys: "; foreach ( @keys ) { print "$_, "; } print "\n"; # 値の配列を取得 @values = values( %hash ); print "Values: "; foreach ( @values ) { print "$_, "; }"100yen", "tempura" => "200yen", "tekkadon" => "500yen" ); # 列挙 while ( ( $key, $value ) = each( %hash ) ) { print "$key : $value\n"; } print "\n"; # キーの配列を取得 @keys = keys( %hash ); print "Keys: "; foreach ( @keys ) { print "$_, "; } print "\n"; # 値の配列を取得 @values = values( %hash ); print "Values: "; foreach ( @values ) { print "$_, "; }]]>
tekkadon : 500yen uni : 100yen tempura : 200yen Keys: tekkadon, uni, tempura, Values: 500yen, 100yen, 200yen,
existsはハッシュに指定したキーが存在するかを確かめます。 deleteはキーと値の対をハッシュから削除します。
#!C:\Perl\bin\Perl.exe # ハッシュ作成 %hash = ( "uni" => "100yen", "tempura" => "200yen", "tekkadon" => "500yen" ); # 列挙 while ( ( $key, $value ) = each( %hash ) ) { print "$key : $value\n"; } print "\n"; # キーが存在するかを確かめる if ( exists( $hash{"tempura"} ) ) { print "\"tempura\" exists in hash.\n"; } # キーと値の対を削除 delete $hash{"tempura"}; print "\"tempura\" was removed.\n"; print "\n"; # 列挙 while ( ( $key, $value ) = each( %hash ) ) { print "$key : $value\n"; } print "\n"; # キーが存在するかを確かめる if ( !exists( $hash{"tempura"} ) ) { print "\"tempura\" doesn't exists in hash.\n"; }"100yen", "tempura" => "200yen", "tekkadon" => "500yen" ); # 列挙 while ( ( $key, $value ) = each( %hash ) ) { print "$key : $value\n"; } print "\n"; # キーが存在するかを確かめる if ( exists( $hash{"tempura"} ) ) { print "\"tempura\" exists in hash.\n"; } # キーと値の対を削除 delete $hash{"tempura"}; print "\"tempura\" was removed.\n"; print "\n"; # 列挙 while ( ( $key, $value ) = each( %hash ) ) { print "$key : $value\n"; } print "\n"; # キーが存在するかを確かめる if ( !exists( $hash{"tempura"} ) ) { print "\"tempura\" doesn't exists in hash.\n"; }]]>
tekkadon : 500yen uni : 100yen tempura : 200yen "tempura" exists in hash. "tempura" was removed. tekkadon : 500yen uni : 100yen "tempura" doesn't exists in hash.
ハッシュを列挙するには、eachを使ってキーと値の対を取得するか、keysによってキーの配列を用いてそれを列挙するかの二つの方法があります。
#!C:\Perl\bin\Perl.exe # ハッシュ作成 %hash = ( "uni" => "100yen", "tempura" => "200yen", "tekkadon" => "500yen" ); # each関数による列挙 while ( ( $key, $value ) = each( %hash ) ) { print "$key : $value\n"; } print "\n"; # キー配列による列挙 foreach ( keys( %hash ) ) { print "$_ : $hash{$_}\n"; } print "\n";"100yen", "tempura" => "200yen", "tekkadon" => "500yen" ); # each関数による列挙 while ( ( $key, $value ) = each( %hash ) ) { print "$key : $value\n"; } print "\n"; # キー配列による列挙 foreach ( keys( %hash ) ) { print "$_ : $hash{$_}\n"; } print "\n";]]>
tekkadon : 500yen uni : 100yen tempura : 200yen tekkadon : 500yen uni : 100yen tempura : 200yen