Perlで覚えたいデータ構造 - 配列・ハッシュ
Perlを使う場合に必ず必要になるデータ構造、配列とハッシュの使い方の覚書きです。
目次
配列
配列は複数件のデータを扱うためのデータ構造です。
■配列を生成する。
配列の生成は以下のように行います。
my @配列の名前 = (); my @配列の名前 = ( データ, データ, … );
配列の生成では、配列の名前を指定します。
もし、生成時にデータを格納する場合に、()内にデータを指定します。
なお、Perlでは配列の生成時にサイズを指定しません。
例えば、空の配列array1を生成するには、以下のように書きます。
my @array1 = ();
もう一つ例を挙げます。データを3つ格納した配列array2を生成するには、以下のように書きます。
my @array2 = ( "people", "dogs", "cats" );
■配列にデータを追加する。
配列へのデータの追加は以下のように行います。
push @配列の名前, データ;
データの追加では、配列の名前とデータを指定します。
追加するたびに、データは配列の末尾に追加され、配列のサイズが増えます。
例えば、配列array1にデータを追加するには、以下のように書きます。
push @array1, "green"; push @array1, "blue"; push @array1, "red";
■配列にデータを格納する。
配列の特定の位置へのデータの格納は以下のように行います。
@配列の名前[インデックス] = データ;
特定の位置へのデータの格納では、配列の名前とインデックスと格納するデータを指定します。
インデックスとは配列の位置を表す数字で、「0」以上で「配列のサイズ」より小さい値を指定する必要があります。
例えば、配列array2へのデータを格納するには、以下のように書きます。
@array2[2] = "rabbits";
■配列からデータを取得する。
配列からのデータの取得は以下のように行います。
ビルトイン関数 $配列の名前[インデックス]; サブルーチン( $配列の名前[インデックス] ); $変数 = $配列の名前[インデックス]; return $配列の名前[インデックス];
データの取得では、配列の名前とインデックスを指定します。インデックスの考え方はデータの格納時と同様です。
配列から取得したデータは、ビルトイン関数やサブルーチンの引数に渡したり、変数に代入したり、メソッドの戻り値として返したりできます。
例えば、配列array1のデータを取得して画面に表示するには、以下のように書きます。
print $array1[0]."\n"; => green print $array1[1]."\n"; => blue print $array1[2]."\n"; => red
■配列中のすべてのデータに同じ処理をする。
配列中のすべてのデータに同じ処理をするためには、以下のようなfor文を使用します。
for ( my $i = 0; $i < @配列の名前; ++$i ) { // $配列の名前[$i] を使用した処理 }
このfor文中の『@配列の名前』は配列のサイズを表します。そのため、このfor文を使えば配列中のすべてのデータに同じ処理を行えます。
例えば、配列array2中のすべてのデータを表示するには、以下のように書きます。
for ( my $i = 0; $i < @array2; ++$i ) { print $array2[$i]."\n"; }
これは以下のように書いた場合と同じ結果になります。
print $array2[0]."\n"; => people print $array2[1]."\n"; => dogs print $array2[2]."\n"; => rabbits
ハッシュ
ハッシュとは、キーに関連付けてデータを格納するデータ構造です。
■ハッシュを生成する。
ハッシュの生成は以下のように行います。
my %ハッシュの名前 = (); my %ハッシュの名前 = ( キー => データ, キー => データ, … );
ハッシュの生成では、ハッシュの名前を指定します。
もし、生成時にデータを格納する場合、()内にキーとデータを指定します。データはキーに関連付けて格納されます。
例えば、空のハッシュhash1を生成するには、以下のように書きます。
my %hash1 = ();
もう一つ例を挙げます。データを3つ格納したハッシュhash2を生成するには、以下のように書きます。
my %hash2 = ( "name" => "nattou_curry", "age" => "26", "height" => "169" );
■ハッシュにデータを格納する。
ハッシュへのデータの格納は以下のように行います。
$ハッシュの名前{キー} = データ;
データの格納では、ハッシュの名前とキーと格納するデータを指定します。データはキーに関連付けて格納されます。
例えば、ハッシュhash1にデータを格納するには、以下のように書きます。
$hash1{"Sun"} = "日曜日"; $hash1{"Mon"} = "月曜日"; $hash1{"Tue"} = "火曜日"; $hash1{"Wed"} = "水曜日";
■ハッシュからデータを取得する。
ハッシュからのデータの取得は以下のように行います。
ビルトイン関数 $ハッシュの名前{キー}; サブルーチン( $ハッシュの名前{キー} ); $変数 = $ハッシュの名前{キー}; return $ハッシュの名前{キー};
ハッシュからのデータの取得では、ハッシュの名前とキーを指定します。キーに関連付いたデータが取得されます。
ハッシュから取得したデータは、ビルトイン関数やサブルーチンの引数に渡したり、変数に代入したり、メソッドの戻り値として返したりできます。
例えば、ハッシュhash2からデータを取得して表示するには、以下のように書きます。
print $hash2{"name"}."\n"; => nattou_curry print $hash2{"height"}."\n"; => 169 print $hash2{"age"}."\n"; => 26
■ハッシュ中のすべてのデータに同じ処理をする。
ハッシュ中のすべてのデータに同じ処理をするためには、以下のようなforeach文を使用します。
foreach my $key ( keys %ハッシュの名前 ) { my $data = $hash2{$key}; // $dataや$keyを使用した処理 }
このforeach文では、すべてのキーとデータについて処理を繰り返します。繰り返すたびに、変数$keyにはキーが、変数$dataにはデータに格納されます。
例えば、ハッシュhash1中のすべてのキーとデータの関連付けを表示するには、以下のように書きます。
foreach my $key ( keys %hash1 ) { my $data = $hash1{$key}; print "$key: $data\n"; }
これは、以下のように書いた場合と同じような結果になります。ただし、キーの順序は決まっていないので、表示順序は異なることがあります。
print "Mon: ".$hash1{"Mon"}."\n"; => Mon: 月曜日 print "Tue: ".$hash1{"Tue"}."\n"; => Tue: 火曜日 print "Wed: ".$hash1{"Wed"}."\n"; => Wed: 水曜日 print "Sun: ".$hash1{"Sun"}."\n"; => Sun: 日曜日
データ構造
アルゴリズム
- Javaを使うなら理解しておきたいアルゴリズム - 抽出・ソート・結合・集計 (リスト&マップ編)
- Javaを使うなら理解しておきたいアルゴリズム - 抽出・ソート・結合・集計 (リスト&ビーン編)
- PHPを使うなら理解しておきたいアルゴリズム - 抽出・ソート・結合・集計
- VBAを使うなら理解しておきたいアルゴリズム - 抽出・結合・集計
- Javascriptを使うなら理解しておきたいアルゴリズム - 抽出・ソート・結合・集計
- SQLを使うなら理解しておきたいアルゴリズム?(というか、select文の書き方) - where・order by・join・group by
- Bashを使うなら理解しておきたいアルゴリズム - 抽出・ソート・結合・集計