1

Perl の第一人者にとっては簡単なもの...

単純に項目の配列 (実際には複数の配列) を取り、ハッシュのキー セクション内の各項目が存在する回数をカウントする関数が必要です。ただし、Perl ハッシュについてはよくわかりません。

@array = qw/banana apple orange apple orange apple pear/

次のようなコードを使用して配列を作成する必要があることを読みました。

my %hash = (
    'banana' => 0,
    'orange' => 0,
    'apple' => 0
    #I intentionally left out pear... I only want the values in the array...
);

ただし、配列内の各項目の配列内の値に等しい対応するキーを使用して、値に1を追加できるループを機能させるのに苦労しています。

foreach $fruit (@array) {
    if ($_ #is equal to a key in the hash) {
        #Add one to the corresponding value
    }
}

これにはいくつかの基本的な機能がすべて 1 つにまとめられているため、すべての初心者 Perl プログラマーを代表して、事前に感謝します!

4

5 に答える 5

6

あなたに必要なのは

my @array = qw/banana apple orange apple orange apple pear/;
my %counts;
++$counts{$_} for @array;

これにより、次のようなハッシュが得られます

my %counts = ( apple => 3, banana => 1, orange => 2, pear => 1 )

forループは、必要に応じてブロックと明示的なループ カウンター変数を使用して記述できます。次のようにします。

for my $word (@array) {
  ++$counts{$word};
}

まったく同じ効果があります。

于 2013-08-23T00:20:53.880 に答える
1

という名前の配列があるとします@array。で配列の 0 番目の要素にアクセスします$array[0]

ハッシュも同様です。%hashのバナナ要素には、でアクセスできます$hash{'banana'}

これは非常に簡単な例です。暗黙の変数$_と少しの文字列補間を利用します:

use strict;

my @array = qw/banana apple orange apple orange apple pear/;

my %hash;
$hash{$_} += 1 for @array;              #add one for each fruit in the list
print "$_: $hash{$_}\n" for keys %hash; #print our results

必要に応じて、特定のハッシュ キーが存在するかどうかを確認できます: if (exists $hash{'banana'}) {...}.

最終的には、ハッシュではなくハッシュへの参照である「hashref」と呼ばれるものが表示されます。その場合、$hashrefを持ってい$hashref->{'banana'}ます。

于 2013-08-23T00:25:17.030 に答える
1

私もちょうど 2 か月前にコードを書き始めたので、これは理解しやすいでしょう。

use Data::Dumper;
use strict;
use warnings;
my @array = qw/banana apple orange apple orange apple pear/;

my %hashvar;
foreach my $element (@array) {
    #Check whether the element is already added into hash ; if yes increment; else add. 
    if (defined $hashvar{$element}) {  
        $hashvar{$element}++;
    }
    else {
        $hashvar{$element} = 1;

    }

}
print Dumper(\%hashvar);

$VAR1 = { 'banana' => 1, 'apple' => 3, 'orange' => 2, 'pear' => 1 }; として出力を出力します。乾杯

于 2013-08-23T02:42:51.113 に答える
1

使用できますexists

http://perldoc.perl.org/functions/exists.html

ハッシュの要素を指定する式を指定すると、対応する値が未定義であっても、ハッシュ内の指定された要素が初期化されていれば true を返します。

foreach my $fruit (@array) {
    if (exists $hash{$fruit}) {
        $hash{$fruit}++;
    }
}
于 2013-08-23T00:20:40.030 に答える