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;
}