カテゴリー
Ruby

Arrayクラスについて知ろう

この章では配列の順番を変えたりするArrayクラスのメソッドなどについて説明します。これらのメソッドはArrayクラスにあらかじめ備わっている機能です。
初めにsliceメソッドについて説明します。9 a番目の添え字の要素からbの数だけ要素を取り出した新たな配列を作ります。9 この例の場合は犬から数えて3個取り出しています。
結果は9です。
sliceのもう一つの使い方を説明します。99 この構文は引数が1つですが、aの添え字に相当する要素を取り出して、その要素を返してくれます。
結果は「犬」です。
また9と同じ意味を、atメソッドを使って作ることが出来ます。99

次はsliceの引数に範囲演算子を使った例です。99 0番目の要素から3番目の要素までを切り取って新たな配列を返してくれます。9 次は連続していない配列の要素を切り取って、新たな配列にする方法です。
sliceは連続した要素しか切り取ることが出来ませんでした。
連続していない配列の要素を切り取るには9を使います。
9この構文では添え字に相当する要素を取得できます。
では例をみてみましょう。9 このように任意の添え字を指定するとその添え字に相当するデータを配列として取得できます。
結果は9です。

次は配列同士を足したり引いたりする演算を説明します。
では例をみてみましょう。99 num1とnum2と言う2つの配列がありますが、これに対して演算を行います。9 =>配列同士を足すと2つの配列の要素を重複した要素も一緒に足し合わせて、配列を作ります。
結果は9です。9 =>配列同士を足し合わせますが重複した要素は1つの要素とする配列をつくります。
結果は9です。
9=> num1からnum2にある要素を取り除いた配列を作ります。
num2の6,7,8はnum1には存在しないので無視されます。
結果は9です。

次は配列の先頭や末尾に新たな要素を付け加えたり、取り除いたりするメソッドについて説明します。
初めにunshiftメソッドについて説明します。99 この例ではサイを配列の先頭に付け加えていますので、
結果は以下の通りです。9 次はshiftメソッドについて説明します。99 この例では先頭の要素である猫を取り除いているので結果は9です。

次はpushメソッドについて説明します。99 この例ではサイを配列の末尾に付け加えていますので、結果は9です。
次はpopメソッドについて説明します。99 この例では末尾の要素であるネズミを取り除いているので、結果は9です。

次はfirstメソッドについて説明します。99 この例では猫を返しますので、結果は「猫」です。

次はlastメソッドについて説明します。99 この例ではネズミを返しますので、結果は「ネズミ」です。
次はconcatメソッドについて説明します。99 配列animalの末尾に別の配列9を結びつけますので、結果は以下の通りです。9 次はcompactメソッドとcompact!メソッドについて説明します。
違いは「!」が付いているか、付いていないかです。9 compactメソッドはnilを取り除いた新しい配列を作ります。
compact!メソッドもnilを取り除きますが、新しい配列を作るのではなく、元の配列自体を操作します。
では例をみてみましょう。9 結果は9ですが、元の配列も変わっているのが分かります。
次の例をみてみましょう。9 新しい配列を作るので、新たな配列aを作って、それにnilを取り除いた配列を代入しています。
結果は9です。
試しに9で出力すると元の配列9が変わらずに出力されます。
次はdeleteメソッドについて説明します。
では例をみてみましょう。99 猫を削除したので、結果は9です。

次はdelete_atメソッドについて説明します。
では例をみてみましょう。99 deleteは引数に要素そのものを指定するのに対して、9は添え字を指定します。
結果は9です。

次はdelete_ifメソッドについて説明します。
では例をみてみましょう。99 delete_ifメソッドは条件に合致した要素だけを削除します。
配列のそれぞれの要素が変数にセットされ、ブロック内の条件に合致した要素だけを削除します。
この例では7を超えている要素を削除しますので、8、9が削除されます。
結果は9です。

次はreject!メソッドについて説明します。
では例をみてみましょう。99 delete_ifメソッドと同じ働きをするreject!メソッドを説明します。
reject!メソッドは条件に合致した要素だけを削除します。
条件に合致した要素を新しい配列に入れるのではなく、元の配列に対して操作を行います。
結果は9です。

次はrejectメソッドについて説明します。
では例をみてみましょう。99 rejectメソッドは条件に合致した要素だけを削除します。
条件に合致した要素を新しい配列に入れます。
reject!メソッドは元の配列に対する操作でしたね。
結果は9です。

次はuniq!メソッドとuniqメソッドについて説明します。
uniq!メソッドは配列の要素の中で同じ要素があった場合には1つにまとめます。
また、このメソッドは新しい配列を作るのではなく、元の配列に対して操作を行います。
uniqメソッドは配列の要素の中で同じ要素があった場合は1つにまとめます。
また、このメソッドは新しい配列を作ります。9 では例をみてみましょう。9 結果は4つある1が1つになったので、9です。
次の例をみてみましょう。9 このメソッドは新しい配列を作りますので、配列aという新しい配列に結果を代入してから、出力しています。

次はcollec!メソッドについて説明します。
では例をみてみましょう。99 collec!メソッドは要素の数だけブロックの中を実行し、そのブロックで処理した結果を返します。
また、このメソッドは新しい配列を作るのではなく、元の配列に対して操作を行います。
この例では配列の要素に100を足したものを元の配列に入れています。
結果は9です。
これはmap!メソッドを使って、9と書き替えても同じ意味になります。9

次はcollectメソッドについて説明します。
では例をみてみましょう。99 collectメソッドは要素の数だけブロックの中を実行し、そのブロックで処理した結果を新たな配列として作成します
結果は9です。
次はfillメソッドについて説明します。
では例をみてみましょう。99 fillメソッドは配列の要素を指定した要素で置き替えます。
このメソッドは新たな配列を作成するのではなく元の配列に対して操作を行います。
結果は9です。
fillメソッドの別の例をみてみましょう。99 添え字を指定すると添え字以降の要素が指定した要素で置き換わります。
結果は9です。
fillメソッドの別の例をみてみましょう。99 添え字と個数を指定すると添え字から指定した個数だけ、指定した要素で置き替わります。
結果は9です。
さらにfillメソッドの別の例をみてみましょう。99 範囲演算子で「ここからここまで」と指定する方法です。
この例では3から6までの添え字の範囲を猫に変えています。
結果は9です。

次はreverse!メソッドについて説明します。
では例をみてみましょう。99 reverse!メソッドは配列の順序を逆にした配列を作成します。
この動作は新たな配列に対してではなく、元の配列に対して行われます。
結果は9です。
次はreverseメソッドについて説明します。
では例をみてみましょう。99 reverseメソッドは配列の順序を逆にした配列を作成します。
この動作は元の配列に対してではなく、新たな配列に対して行われます。
結果は9です。
次はsort!メソッドについて説明します。
では例をみてみましょう。99 sort!メソッドは配列の要素を小さい順に並び変えます。
この動作は新たな配列に対してではなく、元の配列に対して行われます。
結果は9です。

次はsortメソッドについて説明します。
では例をみてみましょう。99 sortメソッドもsort!メソッドと同じ機能なので、配列の要素を小さい順に並び変えます。この動作は元の配列に対してではなく、新たな配列に対して行われます。
結果は9です。
次の例をみてみましょう。99 このsortメソッドは「ブロックでソートする機能」です(ブロックとは{ }の中です)。
この動作は元の配列に対してではなく、新たな配列に対して行われます。
この例のブロック内は9となっていますが、これは大きい順になります。
結果は9です。
次の例をみてみましょう。99 このsort!メソッドは「ブロックでソートする機能」です。
この動作は新たな配列に対してではなく、元の配列に対して行われます。9 次は配列に文字列を追加する方法について説明します。
基本構文は以下の通りです。9 これは配列に文字列を付け加えて新たな配列を作成するのではなく、元の配列自体を変更します。9 結果は9です。

カテゴリー
Perl

foreach文を理解しよう

この章ではforeach文について説明します。
今までは次のように1つずつ配列からデータを取り出していましが、foreachを使うとすべての配列の要素を簡単に取り出すことができます11
では例をみてみましょう。
11foreachは、リストや配列の一番前から順番に$an変数にセットされて、ブロックの中身である文を実行します。
配列やリストの要素がすべてを変数に出力されたら繰り返しが終了します。
111111では例をみてみましょう。

1最初の例では配列の要素をただ単に出力しただけですが、この例の場合には$anに1を連結演算子で付けて出力しています。
11と同じ意味です。
このようにforeach内で配列の要素に変更を加えると元の配列まで影響を受けます。
試しに1と出力すると分かりますが1のように元の配列の要素まで変わっているのが分かります。
次の例をみてみましょう。
1結果は12です。
プロセスは前の例と同じですが、foreachの中の変数である$goukeiを外で出力しています。
このようにブロックの中の変数を外で出力することが出来ます。
注意してほしいのが、この例の1のようにforeach と1の間の変数はブロック外で出力することができません。
この例の場合は$hですが、この変数を制御変数と言います。
この制御変数はブロックの中でだけ有効な変数ですので、ブロックの外で同じ名前の変数を作成しても問題ありません。
では以下の例で確認しましょう。
以下の例の1行目の$anとforeachの$anはお互いに影響を受けません。全く違う変数になります。
1次は制御変数を使わないで配列の要素を出力する方法について説明します。
構文は以下の通りです。
1では次の例を上の構文を使って書き換えてみます。
1以下のように書き替えることも出来ます。
1制御変数を省略した場合は1が制御変数として使われます。
1はデフォルト変数と呼ばれています。
制御変数なので本当は以下の箇所に1が隠れていますが、これは省略できます。
1

次はmap関数について説明します。
foreachに似た関数にmap関数が有ります。
この関数でもforeachと同じことが出来ます。
1では例をみてみましょう。
1map関数は、リストの要素を先頭から順番にブロックの中に代入され、何らかの操作を行った後、その結果をリスト、配列として返してくれます。
この例の場合にはmap関数のブロック内のデフォルト変数に順番に配列の要素が代入していきます。
上の例は以下の例と同じ意味です。
1次の例をみてみましょう。
1配列の各要素が1に代入され、その変数と文字列である1とが文字列連結演算子で連結され、その結果が配列として@gtに代入されます。
結果は以下の通りです。1 次の例をみてみましょう。
1配列の要素がデフォルト変数に代入され、それに1が足されて、その結果が配列として@reに代入されています。
結果は「2 4 5 9 2」です。

次の例をみてみましょう。
以下の形式を添え字を使って書き替えます。
1先ほどの例を添え字を使って書き替えた例が以下です。
1この例の場合は配列を直接指定する代わりに1を使っています。
「$#animal」は末尾の添え字の番号を意味します。
1例えば以下の配列の末尾の添え字番号を求めるには$#animalと書きます
print $#animal;と書けば4が出力されます。
1要素がたくさんある場合は最後の添え字が何番であるかわからなくなりますので、この方法は便利です。
では例の説明に戻りますが、1の中の$anにはリストの0から4の数字が順番に入りますので、結果は1です。
補足ですが、1の他の使い方について説明します。
1この例のように$#animalを添え字に使うことで配列の末尾の要素に新しいデータを入れることが出来ます。
つまり、ネズミをネッシーで上書きしています。
結果は1です。
では次の例も補足ですが、$#animalと同じ意味を表わす添え字について説明します。
1$animal[-1]のように添え字に「-1」を入力することでも配列の末尾の要素にデータを入れることが出来ます。
つまり、$#animalと同じです。
後ろから2番目の要素に何かデータを入れたい場合は以下のように添え字に「-2」を入れてください。
つまり添え字をマイナスで書くことで配列の要素に対して後ろからアプローチできます。1