2008-03-01から1日間の記事一覧

5.16 データ間の関係を表現する

ハッシュを使用して関係を表す。

5.15 同じ要素の個数を数える

%count = (); foreach $element (@ARRAY) { $count{$element}++; }

5.14 ハッシュのサイズを事前に設定しておく

メモリの確保にかかる時間を省くことができるため、プログラムを高速化することが可能。 ## ハッシュに格納したいキーと値のペアの数を、keys(%HASH)に代入する # %hashのサイズを$numに設定する keys(%hash) = $num;

5.13 ハッシュのリファレンス

キーとしてリファレンスが格納されているハッシュに対して、key関数を使用すると、正常な値が返らない。 ## Tie::RefHashモジュールを使用する use Tie::RefHash; tie %hash, "Tie::RefHash"; # これで%hashに格納したキーのリファレンスは正常に動作する

5.12 2つのハッシュから共通/非共通のキーを見つける

## 共通のキーを見つける my @common = (); foreach (keys %hash1) { push (@common, $_) if exists $hash2{$_}; } # @commonには、共通のキーが格納される ## 一方のハッシュにしかないキーを検出する my @this_not_that = (); foreach (keys %hash1) { pus…

5.11 ハッシュを結合する

# リストとして結合 %merged = (%A, %B); # メモリ節約版 %merged = (); while ( ($k, $v) = each (%A) ) { $merged{$k} = $v; } while ( ($k, $v) = each (%B) ) { $merged{$k} = $v; }

5.10 ハッシュをソートする

# keys関数でキーのリストを取得し、それらをsort関数でソートする # %hashはソート対象のハッシュ @keys = sort { criterion() } (keys %hash); foreach $key (@keys) { $value = $hash{$key}; # $key, $valueに対する処理を書く }

5.9 ハッシュのキーと値を入れ替える

# reverse関数を使用して、キーと値を入れ替えたハッシュを作成する。 # %LOOKUPのキーを値に、値をキーにする %REVERSE = reverse %LOOKUP;

5.8 1つのキーに複数の値を関連づける

$hash{$key}に配列のリファレンスを格納する。その配列リファレンスに値を保存する。

5.7 ハッシュの要素を追加順で取り出す

# Tie::IxHashモジュールを使用する use Tie::IxHash; tie %HASH, "Tie::IxHash"; # %HASHを操作する @keys = keys %HASH; # @keysには挿入順で要素が格納される

5.6 ハッシュを出力する

# each関数を使用 while ( ($k, $v) = each %hash ) { print "$k => $v\n"; } # map関数を使用 print map { "$_ => $hash{$_}\n" } keys %hash; # ハッシュをリストに展開1 print "@{ [ %hash ]}\n"; # ハッシュをリストに展開2 { my @temp = %hash; print "…

5.5 ハッシュの各エントリを処理する

# each関数を使用 while(($key, $value) = each(%HASH)) { # $key, $valueに対する処理を書く } # foreachループを使用 foreach $key (keys %HASH) { $value = $HASH{$key}; # $key, $valueに対する処理を書く }

5.4 ハッシュからエントリを削除する

# undefでは消えない。delete関数を使う。 delete($HASH{$KEY});

5.3 不変キーまたは不変値をもつハッシュを作成する。

# Hash::Utilが提供する関数を使用 use Hash::Util qw{ lock_keys unlock_keys lock_value unrock_value lock_hash unlock_key }; lock_keys(%hash); # 現在のキーのみに制限する lock_keys(%hash, @klist); # @klist内のキーのみに制限する。

5.2 ハッシュ内に特定のキーがあるかどうか検証する

# exists関数を使う if (exists ($HASH{$KEY}) { # KEYがある場合 } else { # KEYが無い場合 }

5.1 ハッシュに要素を追加する

$HASH{$KEY} = $VALUE;

4.18 配列の要素をランダムに並べ替える

use List::Util qw(shuffle); @array = shuffle(@array);

4.17 循環リストを作成する

unshift(@circular, pop(@circular)); # 最後の要素が最初の要素になる push(@circular, shit(@circular)); # 最初の要素が最後の要素になる

4.16 計算可能なフィールドでリストをソートする

複雑な条件でソートする方法 # 前処理する @precomputed = map { [compute(), $_] } @unordered; @ordered_precomputed = sort { $a->[0] <=> $b->[0] } @precomputed; @ordered = map { $_->[1] } @ordered_precomputed; # 上記を1つにまとめる map-sort-ma…

4.15 配列内の数値をソートする

@sorted = sort { $a <=> $b } @unsorted;

4.14 特定の条件にマッチする要素を配列からすべて見つける

@MATCHING = grep { TEST ($_) } @LIST; # 実例 @secondary_assistance = grep { $_->income >= 26_000 && $_->income < 30_000 } @applicants;

4.13 テストを最初にパスする要素を見つける

# 方法1 # 条件にマッチする要素が見つかったらlastを呼び出してループを抜ける。 my ($match, $found, $item); foreach $item (@array) { if (CRITERION) { $match = $item; #要素を保存 $found = 1; last; } if ($found) { ## $matchに対する処理を書く } …