この章では配列について説明します。
普通の$bookのような変数は1つしかデータを入れることができませんが、配列は複数のデータを入れることができます。
複数のデータを扱う場合、普通の変数では別々の変数名でそれぞれのデータを入れなければいけません。 これらの5つの変数は一見して関係性があるように見えますが、メモリ上では全く別の変数であり、関係性はありません。
配列を使いますと、以下の通り1つの変数$animalで複数のデータを扱うことが出来ます。
つまり、1つの変数$animalの中には複数のデータがお互い関係性を持って存在していると言えます。 同じ目的で使用するデータは1つにまとめてしまい、1つの変数で複数のデータを管理できると便利です。
このような時に配列を使用します。
配列の作成方法は5つありますので順番に説明していきます。 配列名の命名規則は変数名の命名規則と同じです。
右辺は配列を表すarrayにカッコを付けて、要素をカンマで区切ります。以下の例で説明しますと猫、犬などのデータ間をカンマ区切ります。
スペースの都合で2行で書いていますが1行で書いても結構です。配列の基本構文1では以下のように配列を作成しました。
これを配列の基本構文2で書き換えますと、次のようになります。
添え字とは配列のデータが何番目に入っているのかを管理する番号です。
例えばコインロッカーを使う場合、必ずロッカーに番号が振ってありますが、この番号があるからこそ、どこに荷物があるのか分かるわけです。
添え字もこれと同じで配列のデータがどこに入っているのかを管理する番号です。
また、添え字は0から順番に番号が付けられていきます。
1から番号が振られるわけではありませんので注意してください。
以下の図で添え字について説明します。 両方の配列に共通していることは配列の先頭である0には猫が入っていて、配列の前から2番目の1には犬が入っていて、配列の前から3番目の2にはライオンが入っていて、配列の前から4番目の3には象が入っていて、配列の前から5番目の4にはネズミが入っていると言うことです。
つまり、以下の図のペアは同じことを意味しています。 基本構文1,2で作成した2つ配列はと言う基本構文3で以下のように書くことが出来ます。 配列の基本構文2との違いはブランケットの中に添え字を使っていないことですが、意味は同じです。
添え字が無くても、添え字の0には猫、添え字の1には犬、添え字の2にはライオン、添え字の3には象, 添え字の4にはネズミが入っています。つまり、添え字を明確に書かない場合には0から順に値が入っていきます。 これまでの配列は添え字が数字でしたが、配列の基本構文4では添え字に文字列を使います。
文字列型の添え字はキーとも呼ばれています。
このように作られた配列を連想配列といいます。
その場合、添え字は文字列なのでダブルクォートで囲みます。 このように添え字に文字列を使いますと単に添え字を数字にした形式と比べて、添え字と値の関係性が分かりやすくなります。
nameが大野という言い方と以下のように0番目が大野という言い方ではわかりやすさが違います。 配列の基本構文4を配列の基本構文5で書き換えると以下のようになります。
キーと値の間にはがあり、キーと値の関係付けを行っています。
これまでは配列の作り方を説明しましたが、ここでは配列からデータを取り出す方法について説明します。 配列$animalから配列の値である猫を取り出すにはと、書きます。
には猫と言うデータが入っていますので、変数の箇所で説明したように、printやechoを使ってその中に入っている値を出力することが出来ます。
つまり、ブランケットの中に添え字を入力するとそれに応じた値を配列から取り出すことが出来ます。
ですので上の例の結果は以下の通りです。 今度は連想配列からデータを取り出してみましょう。 連想配列$humanから配列の値である大野を取り出すにはと、書きます。
つまりには大野と言うデータが入っていますのでprintやechoを使ってその中に入っている値を取り出すことが出来ます。
つまり、ブランケットの中にキーを入力するとそれに応じた値を配列から取り出すことが出来ます。
次に配列のデータを変更する方法について説明します。
配列のデータを変更するには以下のやのように新たなデータを代入するだけです。
これで古い要素である猫、犬が上書きされて新しいデータに変わります。 次は配列のデータをカラにする方法について説明します。
例えば配列を初期化したい場合、つまり要素を消したい場合にはカラの配列を代入します。
カラの配列はで表現します。 では例をみてみましょう。 これで配列の要素はカラになります。
タグ: 配列
この章では配列について説明します。
普通の$bookのような変数は1つしかデータを入れることができません。
つまり、変数は他のデータを入れようとするとデータが上書きされてしまいます。
それに対して配列は複数のデータをまとめて入れることができます。
複数のデータを扱う場合、変数では以下のように別々の変数名でそれぞれのデータを入れなければいけません。 配列を使うと以下のように1つの配列名@animalで複数のデータを入れることができるのです。 @animalの中にはがお互い関係性を持って存在していると言えます。
この例のように同じ目的で使用するデータは1つにまとめてしまい、1つの配列で複数のデータを管理できると便利です。
このような時に配列を使用します。 配列を扱う時には配列名の前にアットマーク@ を付けます。
そして右辺はカッコの中をカンマで区切って要素を入力していきます。
例えばのようにデータをカッコで囲んで、カンマ区切りで複数のデータを作っていきますが、このようなデータをリストと言います。そのリストを左辺の配列名に入れます。例えば以下のように作成します。この配列に入っているデータは「添え字」といわれるもので管理します。
添え字とはデータが保管してある場所の概念で、0から番号が付けられていきます。
例えばコインロッカーには番号が付いていますが、番号が付いているからこそ、どこに自分の荷物があるのか分かりますが、これと同じで配列のデータは添え字で管理します。 この$animalの右についてる[0]や[1]が添え字です。
リストの中の個別のデータを指し示すためには@animal[0]ではなく$animal[0]と書きます。
つまり、先頭の記号は@ ではなく$です。
例えば「print $animal[0];」で出力すると「猫」が出力できます。先ほども説明しましたが、添え字は0から順番に番号が付けられていきます。
配列の一番先頭のデータに対応する添え字は1ではなく0です。
ではを例に取って配列について、さらに詳しく説明します。 上の配列文は以下のように書く事も出来ます。 qwはデータ間をスペースやタブなどの空白文字で区切ったリストを作成する演算子です。
qw演算子の中の文字列はシングルクォートで囲まれたものとみなされるので、文字列を囲う必要はありません。
@animal1と@animal2のリストから、新しい配列@animal3
を作成しています。
結果はです。 以下の例のように新しい配列@animal3を作成した後に@animal1や@animal2の内容が変化しても@animal3には影響しません。
以下の例のように@animal3を作成した後に@animal2に龍を加えても、@animal3には影響がありません。
結果は変わらず「猫 犬 ライオン 象 ネズミ コアラ ネッシー」です。 例の中のコメントのしてある箇所はと同じことを意味しています。
リストの中にある「..」を範囲演算子と言います。
例えば(1..100)は1から100までを意味しています。
実際、1から100までをリストに書いていくことは効率が良くないので、このような場面で範囲演算子を使用します。 添え字は0から順番に番号が付けられていきます。
2つの配列の対応関係を図にしたので参考にしてみてください。 もっと詳しく対応関係を説明しますと以下のようになります。 以下の構文でも配列の要素にデータを入れることが出来ます。 今までは以下のように1個1個配列に値を入れていましたが、上の配列の基本構文でも配列にデータを入れることが出来ます。 先ほどの構文では以下のようにデータを入れていきます。 これはリストを使ったデータの代入の仕方です。
この構文であれば右辺のリストの要素を一気に左辺の変数に代入することが出来ます。
右辺のリストの要素数のほうが、左の変数より多い場合は、余った値は捨てられます。
では例をみてみましょう。 結果は「猫犬」です。
この例の場合は余った狸は捨てられます。
逆に右辺のリストの要素数のほうが、左の変数より少ない場合は余った変数には未定義値であるundefが代入されます。
undefとは変数などが未定義な状態を言います。
undefは何も入っていないのでprintで出力しても画面には現れません。 基本構文は以下の通りです。 では例をみてみましょう。 この例では猫が$aに,犬が$bに,ライオンが$cにそれぞれ入ります。
結果は「猫,犬,ライオン」です。
この例はリストを使った以下の方法と同じ意味です。配列のデータを変更するにはやのように新たなデータを代入するだけです。
これで古い要素である猫、犬が上書きされて新しいデータであるキリン、パンダに上書きされます。 配列の要素を出力するには以下の構文で書きます。 では例をみてみましょう。
以下の通り、添え字に相当するデータを取り出すことが出来ます。
次は配列全体の要素を出力する方法について説明します。 今までは個別に
print $animal[1];
print $animal[2];
と出力していましたが、配列の要素を一気にすべてを出力させたい場合には以下のように記述します。 この2種類の出力方法の差は何かといいますと配列をダブルクォートで囲んでいるか、囲んでいないかの差です。
結果は以下のようになります。 ダブルクォートで囲んだ方はデータ間がスペースで区切られます。
ダブルクォートで囲まないとデータ間にスペースが生まれないので、連なって出力されます。 例えば下の配列を初期化したい場合、つまり要素を消したい場合は以下のようにカラのリストを代入します。
空にしますとそれ以降は出力することはできません。