Создание матрицы продуктов для трехэлементных массивов.Я понимаю, что Perl не имеет многомерных массивов и сплющен.Я использовал refs, но, похоже, я не могу обойти проблему цикла for, заключая три продукта в один массив и помещая этот массив в другой отдельный массив.И я тоже могу быть далеко.Будьте хороши, но я потратил слишком много часов на это.
Я переместил значения внутри и из разных мест, например, {}, распечатал переменные до синего цвета и использовал $ last для отладки.,Я, вероятно, зажарен на этом этапе.
use strict;
use warnings;
my @array1 = (1, 2, 3);
my @array2 = (2, 4, 6);
my @matrixArray = ();
my $matrixArray;
my @row;
my @finalArray = maths(\@array1, \@array2);
print @finalArray;
sub maths{
my $array1ref = shift;
my $array2ref = shift;
my $value1;
my $value2;
my $maths;
my @row = ();
my @array1 = @{$array1ref};
my @array2 = @{$array2ref};
my $len1 = @array1;
my $len2 = @array2;
for my $x (0 ..($len1 -1)){
#iterate through first array at each value
$value1 = $array1[$x];
#print $value1, " value1 \n";
for my $y (0 .. ($len2 -1)){
#iterate through second array at each value
$value2 = $array2[$y];
#print $value2, " value2 \n";
#calculate new values
$maths = $value1 * $value2;
#exactly right here
#print $maths, " maths \n" ;
push @row, $maths;
}
}
#and exactly right here but not set of arrays
#print @row, "\n";
return @row;
}
В настоящее время я могу получить это: 246481261218. Какая правильная тупая математика, но ...
она должна выглядеть какmatrix:
2 4 6
4 8 12
6 12 18
Я не передаю три массива, поэтому, похоже, моя проблема в подпрограмме, прежде чем я смогу заняться чем-то еще.Кажется, это тема, по которой я часто скучаю.Извините, если я звучу неумело.
РЕДАКТИРОВАТЬ *** Это работало, но я не смог распаковать его
use strict;
use warnings;
my @array1 = (1, 2, 3);
my @array2 = (2, 4, 6);
my @matrixArray = ();
maths(\@array1, \@array2);
foreach my $x (@matrixArray){
print "$x \n";
}
sub maths{
my $array1ref = shift;
my $array2ref = shift;
my $value1;
my $value2;
my $maths;
my @row = ();
my $row;
my @array1 = @{$array1ref};
my @array2 = @{$array2ref};
my $len1 = @array1;
my $len2 = @array2;
for my $x (0 ..($len1 -1)){
#iterate through first array at each value
$value1 = $array1[$x];
for my $y (0 .. ($len2 -1)){
#iterate through second array at each value
$value2 = $array2[$y];
#calculate new values
$maths = $value1 * $value2;
push @row, $maths;
$row = \@row;
}
push @matrixArray, $row;
}
return @matrixArray;
}
Вывод сразу после вызова функции такой:
ARRAY(0x55bbe2c667b0)
ARRAY(0x55bbe2c667b0)
ARRAY(0x55bbe2c667b0)
, который будет (строка 10) печатать из $ x.
**** РЕДАКТИРОВАТЬ Это работает (почти):
print join(" ", @{$_}), "\n" for @matrixArray;
Вывод немного неправильный...
2 4 6 4 8 12 6 12 18
2 4 6 4 8 12 6 12 18
2 4 6 4 8 12 6 12 18
И примечание: я знал, что $ x - это массив, но, похоже, у меня возникли проблемы при попытке его правильно распаковать.И я больше не фанат Perl.Я тоскую по фьордам Питона.
И ***** РЕДАКТИРОВАТЬ Это прекрасно работает, и я получаю из него три массива:
sub maths{
my ($array1, $array2) = @_;
my @res;
for my $x (@$array1) {
my @row;
for my $y (@$array2) {
push @row, $x * $y;
}
push @res, \@row;
}
#This is the correct structure on print @res!
return @res;
}
Но, хотя это ставитэто вместе правильно, у меня нет выхода после звонка
maths(\@array1, \@array2);
НИЧЕГО ЗДЕСЬ ...
print @res;
print join(" ", @{$_}), "\n" for @res;
foreach my $x (@res){
print join(" ", @{$x}), "\n";
}
И конечно миллион спасибо!Я сожалею о том, что выбрал этот дурацкий курс, и боюсь, что моя оценка в конечном итоге поможет мне. Все еще тоскую по Python!