push, pop, unshift, shift, splice■この章でできること
・配列の末尾に要素を追加する
・配列の末尾から要素を削除する
・配列の先頭に要素を追加する
・配列の先頭から要素を削除する
・配列の部分要素を削除する
・配列の部分要素を置換する
・配列の要素をトランケートする
配列への要素の追加や要素の削除をするためにいくつか関数が用意されています。まず、配列の末尾に要素を追加、末尾から要素を削除するには、push、pop関数を使います。これらを使うと配列でスタックを実現できます。また、配列の先頭への要素の追加、先頭からの要素の削除にはunshift、shift関数を使います。そして、任意位置の要素の削除にはsplice関数を使います。
説明するよりも、サンプルを見たほうが分かりやすいでしょう。以下がそのサンプルです。
#!/usr/bin/perl ############################################# # 配列操作のサンプル # produced by "Perl Programming Tips" ############################################# @array = ("aaa", "bbb", "ccc", "ddd"); # push print "before push : @array\n"; print "push return : " . push(@array, ("eee", "fff")) . "\n"; print "after push : @array\n\n"; # pop print "before pop : @array\n"; print "pop return : " . pop(@array) . "\n"; print "after pop : @array\n\n"; # unshift print "before unshift : @array\n"; print "unshift return : " . unshift(@array, ("eee", "fff")) . "\n"; print "after unshift : @array\n\n"; # shift print "before shift : @array\n"; print "shift return : " . shift(@array) . "\n"; print "after shift : @array\n\n"; # splice (remove) print "before splice : @array\n"; print "splice return : " . splice(@array, 3, 2) . "\n"; print "after splice : @array\n\n"; # splice (replace) print "before splice : @array\n"; print "splice return : " . splice(@array, 2, 1, ("ggg", "hhh")) . "\n"; print "after splice : @array\n\n"; # splice (truncate) print "before splice : @array\n"; print "splice return : " . splice(@array, 3) . "\n"; print "after splice : @array\n\n";
実行結果は次のようになります。
[g@630m pl]$ perl array_01_01.pl before push : aaa bbb ccc ddd push return : 6 after push : aaa bbb ccc ddd eee fff before pop : aaa bbb ccc ddd eee fff pop return : fff after pop : aaa bbb ccc ddd eee before unshift : aaa bbb ccc ddd eee unshift return : 7 after unshift : eee fff aaa bbb ccc ddd eee before shift : eee fff aaa bbb ccc ddd eee shift return : eee after shift : fff aaa bbb ccc ddd eee before splice : fff aaa bbb ccc ddd eee splice return : ddd after splice : fff aaa bbb eee before splice : fff aaa bbb eee splice return : bbb after splice : fff aaa ggg hhh eee before splice : fff aaa ggg hhh eee splice return : eee after splice : fff aaa ggg [g@630m pl]$
それぞれの関数の実行前後の配列の変化と、関数の戻り値を出力しています。では、1つずつ見ていきましょう。まずはpush関数です。push関数は配列の末尾に1つの要素またはリストを追加し、追加後の配列の長さを返します。
次はpop関数です。こちらは配列の末尾から要素を1つ削除して、その要素を返します。
次はunshift関数です。unshift関数は配列の先頭に1つの要素またはリストを追加し、追加後の配列の長さを返します。こちらはpushと違って、追加したことによって、もともとあった配列要素の添え字がずれることに注意する必要があります。
次はshift関数です。shift関数は配列の先頭から要素を1つ削除して、その要素を返します。こちらもpopと違って、削除したことによって、もともとあった配列要素の添え字が1つずつずれることになります。
次は配列の任意位置の要素の削除です。これはsplice関数を使います。
splice関数の第2引数には削除を開始する位置(最初の要素を0とした配列のインデックス)を指定します。第3引数を省略すると、配列の最後までの要素が削除されます。これを使うと、配列の任意位置からのトランケートができます。また、第4引数にリストを指定すると、指定したリストで配列の部分要素を置換することができます。