2008-03-01から1日間の記事一覧
ハッシュを使用して関係を表す。
%count = (); foreach $element (@ARRAY) { $count{$element}++; }
メモリの確保にかかる時間を省くことができるため、プログラムを高速化することが可能。 ## ハッシュに格納したいキーと値のペアの数を、keys(%HASH)に代入する # %hashのサイズを$numに設定する keys(%hash) = $num;
キーとしてリファレンスが格納されているハッシュに対して、key関数を使用すると、正常な値が返らない。 ## Tie::RefHashモジュールを使用する use Tie::RefHash; tie %hash, "Tie::RefHash"; # これで%hashに格納したキーのリファレンスは正常に動作する
## 共通のキーを見つける my @common = (); foreach (keys %hash1) { push (@common, $_) if exists $hash2{$_}; } # @commonには、共通のキーが格納される ## 一方のハッシュにしかないキーを検出する my @this_not_that = (); foreach (keys %hash1) { pus…
# リストとして結合 %merged = (%A, %B); # メモリ節約版 %merged = (); while ( ($k, $v) = each (%A) ) { $merged{$k} = $v; } while ( ($k, $v) = each (%B) ) { $merged{$k} = $v; }
# keys関数でキーのリストを取得し、それらをsort関数でソートする # %hashはソート対象のハッシュ @keys = sort { criterion() } (keys %hash); foreach $key (@keys) { $value = $hash{$key}; # $key, $valueに対する処理を書く }
# reverse関数を使用して、キーと値を入れ替えたハッシュを作成する。 # %LOOKUPのキーを値に、値をキーにする %REVERSE = reverse %LOOKUP;
$hash{$key}に配列のリファレンスを格納する。その配列リファレンスに値を保存する。
# Tie::IxHashモジュールを使用する use Tie::IxHash; tie %HASH, "Tie::IxHash"; # %HASHを操作する @keys = keys %HASH; # @keysには挿入順で要素が格納される
# 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 "…
# each関数を使用 while(($key, $value) = each(%HASH)) { # $key, $valueに対する処理を書く } # foreachループを使用 foreach $key (keys %HASH) { $value = $HASH{$key}; # $key, $valueに対する処理を書く }
# undefでは消えない。delete関数を使う。 delete($HASH{$KEY});
# 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内のキーのみに制限する。
# exists関数を使う if (exists ($HASH{$KEY}) { # KEYがある場合 } else { # KEYが無い場合 }
$HASH{$KEY} = $VALUE;
use List::Util qw(shuffle); @array = shuffle(@array);
unshift(@circular, pop(@circular)); # 最後の要素が最初の要素になる push(@circular, shit(@circular)); # 最初の要素が最後の要素になる
複雑な条件でソートする方法 # 前処理する @precomputed = map { [compute(), $_] } @unordered; @ordered_precomputed = sort { $a->[0] <=> $b->[0] } @precomputed; @ordered = map { $_->[1] } @ordered_precomputed; # 上記を1つにまとめる map-sort-ma…
@sorted = sort { $a <=> $b } @unsorted;
@MATCHING = grep { TEST ($_) } @LIST; # 実例 @secondary_assistance = grep { $_->income >= 26_000 && $_->income < 30_000 } @applicants;
# 方法1 # 条件にマッチする要素が見つかったらlastを呼び出してループを抜ける。 my ($match, $found, $item); foreach $item (@array) { if (CRITERION) { $match = $item; #要素を保存 $found = 1; last; } if ($found) { ## $matchに対する処理を書く } …