这个问题的答案已经在任何第一次介绍算法课程的第一讲的“嵌套循环”部分......
根据某个参数在数组中找到“最佳”值的基本算法是:
best ← worst possible value
for each value in array
if value is better than best
then best ← value
end if
end for each
你想要的是最长的字符串,所以最坏的情况是一个空字符串。在 Perl 中,这会给你:
my @array = qw/one two three/;
my $best = '';
for my $value (@array) {
if (length $value > length $best) {
$best = $value;
}
}
如果您想对多个数组执行此操作,只需添加一个额外的外循环:
best_array ← ()
for each array in array_of_array
best ← worst possible value
for each value in array
if value is better than best
then best ← value
end if
end for each
best_array ← best_array, best
end for each
或者,在 Perl 中:
my @arr1 = qw/one two three/;
my @arr2 = qw/four five seven/;
my @arr3 = qw/six eight nine/;
my @array_of_arrays = (\@arr1, \@arr2, \@arr3);
my @longest_words;
for my $array (@array_of_arrays) {
my $best = '';
for my $value (@$array) { # notice "@$" to dereference the array
if (length $value > length $best) {
$best = $value;
}
}
push @longest_words, $best;
}
更新:子程序
我刚刚意识到这个问题专门要求一个子程序。上面的代码很容易变成子程序:
my @arr1 = qw/one two three/;
my @arr2 = qw/four five seven/;
my @arr3 = qw/six eight nine/;
my @array_of_arrays = (\@arr1, \@arr2, \@arr3);
sub funct {
my @longest_words;
for my $array (@_) {
my $best = '';
for my $value (@$array) { # notice "@$" to dereference the array
if (length $value > length $best) {
$best = $value;
}
}
push @longest_words, $best;
}
return @longest_words;
}
my @longest_words = funct(@array_of_arrays);