访问Perl 2x2阵列的单个元素

时间:2012-08-27 10:54:29

标签: perl

我可以使用此代码

创建矩阵
#!/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或加到第二行的第一列

2 个答案:

答案 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 strictuse 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]++

递增
相关问题