ミスティーネットPerl・CGI講座 パール・CGIレッスン MISTY-NETレンタルサーバー・PERLプログラミング講座 CGI&PERL究極のレシピ

管理運営:有限会社ミスティーネット

| HOME | ご利用について | 推奨環境 | リンクに関して | 免責/規約 | お問合せ | ミスティーネット | リンク集 |
Perl言語リファレンス

ミスティーネットPerl・CGI講座/基本編
ミスティーネットPerl・CGI講座/基本編
始めに 始めに
変数について 変数について
処理の制御1 処理の制御1
処理の制御2 処理の制御2
配列の処理 配列の処理
ハッシュの処理 ハッシュの処理
数値の扱い 数値の扱い
文字の扱い 文字の扱い
時間の処理 時間の処理
サブルーチン サブルーチン
ファイルの処理 ファイルの処理
ディレクトリの処理 ディレクトリ処理
CGIについて CGIについて
漢字の処理 漢字の処理
    (文字コード)
Cookie の処理 Cookie の処理
正規表現1 正規表現1
正規表現2 正規表現2
演算子について 演算子について
ライブラリ ライブラリ
デバッグ デバック
環境変数について 環境変数
ミスティーネットPerl・CGI講座/基本編

ミスティーネットPerl・CGI講座/応用編
ミスティーネットPerl・CGI講座/応用編
カウンターを作ってみよう カウンターを
     作ってみよう!
ミニゲームを作ってみよう ミニゲームを
     作ってみよう!
ミスティーネットPerl・CGI講座/応用編

ミスティーネットPerl・CGI講座/WEB講座一覧
ミスティーネット
HTML講座 HTML講座
スタイルシート講座 スタイルシート講座
JavaScript講座 JavaScript講座
UNIXコマンド講座 UNIXコマンド講座

ミスティーネット
ラブラブメールでツーショット

人気サイトランキング

人気サイトランキング

8daysランキング

  HOME >> 配列の処理
  1. 配列の使い方
  2. 配列の操作
  3. 配列のループ処理
  4. 配列の並べ替え

■ 配列の使い方
[配列の作成]
配列は下記のようにリストの値を配列変数に代入することで作成できます。
配列は複数のデータを一つの配列変数にまとめることができる為、大量のデータを扱う場合にとても便利な機能です。

@number = (1, 2, 3, 4, 5, 6);



[配列の取り出し方]
配列内の要素を直接扱いたい場合は、配列の添字を使います。
添字は配列内の要素に付けられた0からの連番です。

print $number[0];
添字は0から始まるので、「$number[0]」 は「1」と表示されます。
下記は配列 @number のイメージです。(上の数字は添字です)



[配列の追加・結合]
配列にデータを追加したい場合は、リスト形式で元の配列と追加したいデータを代入すればOKです。
@number = (0, @number, 7, 8, 9);
上記では、元の @number の前に 「0」 というデータを追加している為、添字もそれに伴って移動します。
現在の $number[0] の値は 「0」 になります。
下記は現在の配列 @number のイメージです。(添字の位置がずれていることを確認してください。)


配列と配列を結合させる場合は、追加のときと同様にリスト形式で元の配列を代入すればOKです。
@number2 = (10, 11, 12, 13);
@number3 = (@number, @number2);      ← 配列の結合
上記では @number3 という配列を新に作って結合させた配列を代入していますが、元の配列(@number や @number2 )に代入することも出来ます。
その際には、元のデータは失われて、新たに結合されたデータが代入されます。



■ 配列の操作
Perl には配列のデータを操作する為の関数が用意されています。
関数を使うことでデータの追加や削除が簡単に行なえるようになります。

[配列の末尾にデータを追加する]
配列の末尾にデータを追加する場合には「push」関数を使います。

push(@number, 14);      ← @number の末尾に14を追加する



[配列の末尾からデータを切り取る]
「pop」関数では、配列の末尾のデータを切り取ってその値を返します。

$last_data = pop(@number);      ← @number の末尾のデータを切り取る
「pop」関数では、末尾データを切り取った後そのデータを返すので、$last_data には切り取られたデータがセットされます。



[配列の先頭からデータを切り取る]
「shift」関数では、先頭データを切り取ってその値を返します。

$top_data = shift(@number);      ← @number の先頭のデータを切り取る
「shift」関数では、先頭データを切り取った後そのデータを返すので、$top_data には切り取られたデータがセットされます。



[配列の先頭にデータ追加する]
「unshift」関数では、配列の先頭にデータを追加します。

unshift(@number, 0);      ← @number の先頭に0を追加する





■ 配列のループ処理
第4章でもご紹介しましたが、配列を処理する場合に「foreach」文を使ってのループ処理が行なえます。 「foreach」文では、配列内の要素を1つづつ取り出し、それをスカラー変数に代入して順番に処理を行います。
foreach $list ( @list ) { 処理 }
下記は @number 内の要素を1つづつ取り出して2倍にして表示するプログラムです。
foreach $num ( @number ) {
    print ( $num * 2 );
}
スカラー変数を特に指定しない場合には、デフォルト変数 $_ に値が代入されます。


「map」関数を使うと上記と同じ処理をより簡単に行なうことが出来ます。
print ( map { $_ * 2 } @number );
「map」では、デフォルト変数 $_ を使って処理を行ないます。
「map」関数に関してのより詳しい情報はこちらをご覧ください。 → map 関数のリファレンス




■ 配列の並べ替え
大量のデータを扱う際には、処理を行なう前に、アルファベット順などでデータを並べ替えて整理しておきたい場合があります。 データの並べ替えには「sort」関数と「reverse」関数を使って簡単に並べ替えを行なうことが出来ます。

[sort 関数]
sort 関数リファレンス

sort 関数の書式は下記のようになります。
sort { $a cmp $b } 配列      ← 文字で並べ替える場合(昇順)
sort { $b cmp $a } 配列      ← 文字で並べ替える場合(降順)
sort { $a <=> $b } 配列      ← 数値で並べ替える場合(昇順)
sort { $b <=> $a } 配列      ← 数値で並べ替える場合(降順)

○ 文字の順番で並べ替える場合
@list = ('x', 'y', 'a', 'i', 'p', 'm');
print sort { $a cmp $b } @list;      ← 文字データを(昇順で)並べ替えて表示する

# a, i, m, p, x, y の順番で表示される。

○ 数の小さい順に並べ替える場合
@list = (9, 7, 11, 2, 8, 42);
print sort { $a <=> $b } @list;      ← 数値データを(昇順で)並べ替えて表示する

# 2, 7, 8, 9, 11, 42 の順番で表示される。

○ 数の小さい順に並べ替える場合
@list = (9, 7, 11, 2, 8, 42);
print sort { $a <=> $b } @list;      ← 数値データを(昇順で)並べ替えて表示する

# 2, 7, 8, 9, 11, 42 の順番で表示される。

○ 数値や文字データが混ざっている場合
@list = (43, 'u', 'P', 8, 'あ', 'か');
print sort @list;      ← 標準的な文字列比較で並べ替えを行なう

# 8, 43, P, u, あ, か の順番で表示される。
{ } 内の条件を指定しない場合には、標準的な文字比較で並べ替えられます。
(数値 → 半角英数大文字 → 半角英数小文字 → 全角文字) の順番。



[reverse 関数]
reverse 関数リファレンス

reverse 関数は逆順に並べ替えたいときに使います。

@list = (9, 7, 11, 2, 8, 42);
print reverse @list;      ← 数値データを逆順(降順)で並べ替えて表示する

# 42, 11, 9, 8, 7, 2 の順番で表示される。
上記プログラムは、「sort { $b <=> $a } @list;」 と同義です。




← 前のページへ戻る 次のページへ →


| HOME | ご利用について | 推奨環境 | リンクに関して | 免責/規約 | お問い合わせ | ミスティーネット |
(C)Copyright 2002 ミスティーネット Inc. All Right Reserved.