Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/perl/10.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Arrays Perl:使用哈希而不是数组_Arrays_Perl_Hash - Fatal编程技术网

Arrays Perl:使用哈希而不是数组

Arrays Perl:使用哈希而不是数组,arrays,perl,hash,Arrays,Perl,Hash,我试图用散列而不是数组来实现这一点,但它似乎不起作用。这是我的尝试: Word Length Occurrence 1 27 2 104 3 1039 4 3505 5 7181 6 11765 7 15898 为什么??任何阵列都可以在这里工作 while ($word = <STDIN>) { chom

我试图用散列而不是数组来实现这一点,但它似乎不起作用。这是我的尝试:

Word Length  Occurrence
1            27 
2            104 
3            1039 
4            3505 
5            7181 
6            11765 
7            15898 

为什么??任何阵列都可以在这里工作

while ($word = <STDIN>) {
    chomp($word);
    $length = length($word);
    $wordLength{$word} = "$length";
}

foreach $word (sort keys %wordLength) {
    print "$word, $wordLength{$word}\n"; # print key and value
}
哈希虽然效率较低,但几乎不需要任何更改就可以轻松使用

my @occurrences_by_length;
while (my $word = <>) {
   chomp($word);
   my $length = length($word);
   ++$occurrences_by_length[$length];
}

print "Length  Occurrences\n";
for my $length (1..$#occurrences_by_length) {
   my $occurrences = $occurrences_by_length[$length]
      or next;

   printf "%6d  %11d\n", $length, $occurrences;
}

为什么不$wordLength{$length}?你现在键入word真是太奇怪了。如果你仍然想要每个长度的计数,那么你只需要更改原始代码中的括号:$wordLength[$length]++变成$wordLength{$length}++。而且,它似乎不起作用,这不是一个有效的问题描述。你的代码实际上在做什么?这和你期望的有什么不同?你能清楚地说明你需要什么吗?如果它是这个伟大的作品阅读下面显示的输出,那么你的哈希尝试显然与此无关。您将单词存储为键,而不是长度,并且不计算。这是家庭作业吗?
my @occurrences_by_length;
while (my $word = <>) {
   chomp($word);
   my $length = length($word);
   ++$occurrences_by_length[$length];
}

print "Length  Occurrences\n";
for my $length (1..$#occurrences_by_length) {
   my $occurrences = $occurrences_by_length[$length]
      or next;

   printf "%6d  %11d\n", $length, $occurrences;
}
my %occurrences_by_length;
while (my $word = <>) {
   chomp($word);
   my $length = length($word);
   ++$occurrences_by_length{$length};
}

print "Length  Occurrences\n";
for my $length (sort { $a <=> $b } keys(%occurrences_by_length)) {
   my $occurrences = $occurrences_by_length{$length};
   printf "%6d  %11d\n", $length, $occurrences;
}