1

キーが配列に存在する場合、そのキーとその値をハッシュから出力したいと思います。これが私が書いたコードです。

for($i=0;$i<@array.length;$i++)
{
    if (exists $hash{$array[$i]})
    {
        print OUTPUT $array[$i],"\n";
    }
}

上記のコードから、キーを出力できます。しかし、そのキーの値を出力する方法がわかりません。

誰かが私を助けることができますか?

ありがとう

4

2 に答える 2

7

@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";
    }
}
于 2012-08-14T00:25:00.857 に答える
1

ハッシュ スライスを使用した代替方法:

foreach (@hash{@array}) { print OUTPUT "$_\n" if defined };

print OUTPUT join("\n",grep {defined} @hash{@array});

(ゴルフが好きな人向け)。

于 2012-08-14T12:35:37.860 に答える