Perlについての質問箱 14箱目
■ このスレッドは過去ログ倉庫に格納されています
0747デフォルトの名無しさん
NGNGえと、皆さん知ってて黙ってるんだとは思いますが、言いたくてしょうがないので言わしてください。
>>695 において、binsearch とハッシュについて、「キーの重複はダメ」と書かれてますが、それは謙遜のしすぎです。
低コストな回避策があります。
binsearch については 『区間 [$l, $r) の外には明らかに目的のキーがない』という約束の下で、
[$l, $r) を縮小していくようにループを回してやり、縮小し切ったところで
$l と $r を返す関数仕様にすれば、キーが重複してても無問題(区間 [$l, $r) のデータが全てそのキーに該当する)。
しかもキーが無かった場合も $l == $r によって判別できる。
ハッシュについては、ハッシュ構築時に、$hash{$key} = $value; とするのでなく、
push @{$hash{$key}}, $value;
としてやれば、foreach (@{$hash{$key}}) { ... } によって、同一キーを持つ全ての要素にアクセスできる。
ついでに、ハッシュを静的に構築したいなら、配列への参照を返す演算子 '[]' を使って、
my %hash = {
key1 => [ value1, value2, value3, ... ],
...
}
とすれば可。
■ このスレッドは過去ログ倉庫に格納されています