访问Perl 2x2数组的单个元素

访问Perl 2x2数组的单个元素,perl,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) { prin

我可以用这段代码创建一个矩阵

#!/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添加到第二行的所有值或第二行的第一列中

您使用的是行x列还是列x行?我将假设第一个

要修改$x,$y的值,请执行以下操作:

要将1添加到$x列,请执行以下操作:

要将1添加到第$y行,请执行以下操作:

您使用的是行x列还是列x行?我将假设第一个

要修改$x,$y的值,请执行以下操作:

要将1添加到$x列,请执行以下操作:

要将1添加到第$y行,请执行以下操作:

您必须始终在编写的每个程序的顶部使用strict和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]},因此您可以通过为@{$data[1]}写入$\++,来增加行中的每个元素。第二行的第一列用$data[1][0]+

递增。您必须始终在编写的每个程序的顶部使用strict和WARNING。这一点尤其适用于在代码方面寻求帮助的情况,因为这些度量将揭示一些您可能忽略的简单错误

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]},因此您可以通过为@{$data[1]}写入$\++,来增加行中的每个元素。第二行的第一列用$data[1][0]+

递增,您正在生成并丢弃它,这仍然是真的吗?我读到最近的Perl没有在void上下文中构建列表。没有。map的内部功能已经过修改,因此它不会在void上下文中调用数组时无用地构建和丢弃数组。但是电话仍然要求这样做,依靠Perl的仁慈是错误的。事实上,正确使用map应该没有任何副作用-即块不应该更改任何内容,也不应该执行IO:它应该只返回一个您正在构建并丢弃的列表值,这仍然是真的吗?我读到最近的Perl没有在void上下文中构建列表。没有。map的内部功能已经过修改,因此它不会在void上下文中调用数组时无用地构建和丢弃数组。但是电话仍然要求这样做,依靠Perl的仁慈是错误的。事实上,正确使用map应该没有任何副作用-即块应该什么都不改变,不执行IO:它应该只返回一个列表值。另外,请查看更多好的示例。@感谢链接:这确实是一个好的示例:另外,请查看更多好的示例。@感谢链接:这确实是一个好的示例: