我可以使用此代码
创建矩阵#!/usr/bin/perl -w
@arr1 = (10,20,30);
@arr2 = (10,20,30);
@arr3 = (10,20,30);
@ref_arr = (\@arr1, \@arr2, \@arr3);
print"Prog starts\n";
foreach $ref (@ref_arr) {
#print @$ref->[0];
foreach $val (@$ref) {
print "$val ";
}
print"\n";
}
使用map
函数,我可以像这样修改矩阵中的每个值
示例:将每个值增加1
foreach $ref (@ref_arr) {
map($_++, @$ref);
}
但我想修改某一行或特定值,即将所有第二行的值加1或加到第二行的第一列
答案 0 :(得分:3)
您使用的是row x column
还是column x row
?我将假设第一个。
修改$x, $y
的值:
$ref_arr[$x][$y] = $new_value;
向列$x
添加1:
$_++ for @{ $ref_arr[$x] };
向行$y
添加1:
$_->[$y]++ for @ref_arr;
答案 1 :(得分:2)
您必须总是 use strict
和use warnings
位于您编写的每个程序的顶部。这尤其适用于您要求代码提供帮助的情况,因为这些措施将揭示您可能忽略的简单错误
map
函数不用于迭代列表:它通过将函数应用于源列表的每个元素来将一个列表“映射”到另一个列表
写作时
map($_++,@$ref)
您正在构建并放弃@list
中值的副本。你应该写的是
$_++ for @$ref
至于如何修改数组中的单个值,可以将数组初始化简化为
my @data = (
[10, 20, 30],
[10, 20, 30],
[10, 20, 30]
)
我希望从中可以更容易地看到结构中的第一个10
可以$data[0][0]
访问,例如,最后一个20
是$data[2][1]
(记住) Perl数组从零索引)。您可以像访问任何普通标量一样访问和修改这些值
至于您的特定示例,第二行是@{$data[1]}
,因此您可以通过编写$_++ for @{$data[1]}
来递增行的每个元素。第二行的第一列以$data[1][0]++