キーが配列に存在する場合、そのキーとその値をハッシュから出力したいと思います。これが私が書いたコードです。
for($i=0;$i<@array.length;$i++)
{
if (exists $hash{$array[$i]})
{
print OUTPUT $array[$i],"\n";
}
}
上記のコードから、キーを出力できます。しかし、そのキーの値を出力する方法がわかりません。
誰かが私を助けることができますか?
ありがとう
@array.length
構文的には合法ですが、それは間違いなくあなたが望むものではありません.
@array
、スカラー コンテキストでは、配列内の要素の数を示します。
このlength
関数は引数なしで、 の長さを返します$_
。
.
演算子は文字列連結を実行します。
したがって@array.length
、 の要素数と に@array
含まれる文字列の長さを取り、$_
それらを文字列として扱い、それらを結合します。 $i < ...
数値コンテキストを課すため、数値として扱われる可能性がありますが、希望するものではないことは確かです。(@array
要素数が 15 で、$_
たまたま 7 文字の長さの場合、数字は157
無意味な値である必要があります。)
の要素の数を計算する正しい方法は、スカラー コンテキスト内@array
だけです。@array
または、より明確にするために、scalar @array
.
あなたの質問に答えるために、$array[$i]
がキーの場合、対応する値は$hash{$array[$i]}
です。
しかし、C スタイルのfor
ループは、特に各反復でインデックスではなく値のみが必要な場合は、配列をトラバースする最もクリーンな方法ではありません。
foreach my $elem (@array) {
if (exists $hash{$elem}) {
print OUTPUT "$elem\n";
}
}
ハッシュ スライスを使用した代替方法:
foreach (@hash{@array}) { print OUTPUT "$_\n" if defined };
print OUTPUT join("\n",grep {defined} @hash{@array});
(ゴルフが好きな人向け)。