§3.3 配列を操作する


作成日:2001/06/28(木)

さて、前回は配列の個々の要素、あるいは複数の要素を参照したり、値を代入することを見てきました。 ここでは配列そのものを操作する関数をいくつか紹介します。

配列の末尾への操作 - pushとpop - 

まず配列の末尾へ新たに値を追加することを考えましょう。 前節までで見てきたことを使っても、

 @array = (@array, $value);

とすれば、@array配列の末尾に$valueの値を追加することも出来ます。 しかしPerlにはpushという関数が用意されています。 前節でも使った、

 @array = ("can", 43, "masa", 81, "hide", 69);

の最後に、"katsu", 49, "tsuyo", 77という4つの要素を追加するには、

 push(@array, "katsu", 49, "tsuyo", 77);

と書きます。 このようにpush関数は、

 push(@array, list);

という書き方によって、@arrayの末尾にlistを追加します。 もちろんlistにはスカラー変数や配列も使えるので、

 push(@array, $a, $b);
 push(@array, @tsuika);

という書き方もOKです。 配列の長さは追加した要素の個数分だけ増えます。またpush関数は、要素を追加した後の配列の要素数を戻り値(後の章参照)として返すので、

 $length = push(@array, "katsu", 49, "tsuyo", 77);

とすると、$lengthには10が代入されます。

次に、配列の最後の要素を取り除くには、pop関数を用います。

 pop(@array);

とすると、@array配列の最後の要素が取り除かれます。 またpop関数は取り除いた最後の要素を戻り値として返すので、

 $last_data = pop(@array);

とすると、@array配列の最後の要素を$last_dataに代入することが出来ます。
 このpushとpopという2つの関数は、配列をスタックとして扱う基本的な関数です。 ここでスタックとはデータのリストのことで、新しいデータはスタックの最後に追加され、値を取り出すときはスタックの最後から取り出します。 このスタックは時々、セルフサービスの喫茶店などの積みあがったトレーにたとえられます。 そして1つ1つのトレーがデータです。 喫茶店に入ると、積みあがったトレーの一番上の物を取って使います。 そして喫茶店を出るときは使い終わったトレーをまた一番上に戻します。 ねっ、似てるでしょ?

配列の先頭への操作 - shiftとunshift - 

さて今度は配列の先頭に対しての操作を取り上げます。 配列の先頭へ要素を追加するには、

 @array = ("toshi", 58, "yoshiki", "X", @array);

とすることもできますが、Perlにはunshift関数が用意されています。 書き方はpush関数とまったく同じで、

 unshift(@array, "toshi", 58, "yoshiki", "X");

のようにします。 追加する要素にはスカラー変数や配列も使用できます。 配列の長さは追加した要素の個数分だけ増え、追加前の要素のインデクスも、追加した要素の個数分だけずれます。また、これもpush関数と同じで、追加した後の要素数を戻り値として返すので、

 $length = unshift(@array, "toshi", 58, "yoshiki", "X");

とすると、$lengthには10が代入されます。

配列の最初の要素を取り除くには、

 ($first_data, @array) = @array;

とすることも可能ですが、shift関数を使うことも出来ます。

 shift(@array);

とすると@array配列の最初の要素が除かれます。 またpop関数同様、取り除いた最初の要素を戻り値として返すので、

 $first_data = shift(@array);

とすると$first_dataに@array配列の最初の要素が代入されます。

その他もろもろ

配列を逆さにする - reverse関数 - 
 reverse関数は配列のコピーを受け取って、その順番を逆にします。 受け取るのはあくまでコピーなので、配列のもとの順番は変わりません。

 @yarra = reverse(@array);

配列の順番を維持したくないときには、reverse関数で逆さにした物をまた@array配列に代入します。

 @array = reverse(@array);

reverse関数は、掲示板の記事を古い順ではなく、新しい順に表示するときなどに用います。

ソート(並べ替え)する - sort関数 - 
sort関数は配列の要素をASCIIコード昇順にソート(並べ替え)します。

 @array = ("masa", "can", "katsu", "toshi");
 @sorted = sort(@array);
 #@sorted = ("can", "katsu", "masa", "toshi")となる

数値からなるリストをソートするときは注意が必要です。 (13, 4, 28, 7, 58)をソートすると(13, 28, 4, 58, 7)となります。

この節では配列を操作する関数についてみてきました。 次の節では配列操作のエキスパート、splice関数について見て行きます。


「§3.2 配列の要素にアクセスする」へ 「§3.4 配列操作の達人」へ
ソフトバンク パブリッシング株式会社

Copyright (C) can All Rights Reserved
e-mail:ishiki@mrj.biglobe.ne.jp