gpt4 book ai didi

perl - 在 Perl 中复制二维数组

转载 作者:行者123 更新时间:2023-12-05 09:24:35 25 4
gpt4 key购买 nike

我正在尝试将二维数组复制到另一个数组中。但是,我遇到了一个奇怪的问题,我的函数没有打印第一行。但是,值在那里,因为当我单独打印第一行时,它确实被打印出来了。

这是我的 perl 代码:

#!/usr/bin/perl
use UNIVERSAL 'isa';

#Function to print the contents of an array
sub printArray {
my ($vHash) = @_;
if (isa($vHash, 'ARRAY')) {
foreach my $el (@$vHash) {
print "A: $el\n";
printArray($el);
}
} else {
return;
}
return;
}

my @array = "";
my @line1 = (1, 2, 3);
my @line2 = (3, 4, 5);
my @line3 = (6, 7, 8);

#Creating a 2D array
@array = (\@line1, \@line2, \@line3);

my @array2 = "";
my $row_size = @array;
print "ROW SIZE: $row_size\n";
my $column_size = @{$array[0]};
print "COL Size: $column_size\n\n\n";

#Copying over the 2D array...element by element
for (my $i=0; $i<$row_size; ++$i) {
for (my $j=0; $j<$column_size; ++$j) {
$array2[$i][$j] = $array[$i][$j];
}
}

print "\n\nORIG ARRAY\n\n";
printArray(\@array);
print "\n\nCOPY ARRAY\n";
printArray(\@array2);

print "\n\n";

#Printing the first row separately
foreach my $ele (@{$array2[0]}) {
print "V: $ele\n";
}

这是程序的输出:

ROW SIZE: 3
COL Size: 3




ORIG ARRAY

A: ARRAY(0x65b110)
A: 1
A: 2
A: 3
A: ARRAY(0x65b170)
A: 3
A: 4
A: 5
A: ARRAY(0x65b1d0)
A: 6
A: 7
A: 8


COPY ARRAY
A: #WHY THIS IS MISSING
A: ARRAY(0x6d1f00)
A: 3
A: 4
A: 5
A: ARRAY(0x6d1f50)
A: 6
A: 7
A: 8


V: 1 #THESE VALUES ARE COMING FINE
V: 2
V: 3

我真的很困惑我在这里做错了什么!!为什么函数 printArray 不打印第一行?任何帮助将不胜感激。谢谢,新手

最佳答案

顺便说一下,您不需要像这样编写复制函数。

use Storable qw(dclone);
my @array2 = @{ dclone(\@array) };

dclone 可以深度复制任何 perl 数据结构。

此外,如果您只需要打印这些数据,您可以只使用Data::Dumper

use Data::Dumper;
print Dumper(\@array), "\n"

关于perl - 在 Perl 中复制二维数组,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10725508/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com