加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 大数据 > 正文

数组 – Perl:在Foreach循环中为数组元素分配引用

发布时间:2020-12-15 23:34:11 所属栏目:大数据 来源:网络整理
导读:我真的很想弄明白这一点,但是我的脸因为不断撞到这堵砖墙而受到伤害. 我正在尝试加载9个文本文件,每个文件由7行7个字符的矩阵组成,每个7个字符由空格分隔,然后将每个引用的矩阵保存到数组中的元素.我正在阅读每个文件中,但是当我访问我的数组时,所有元素都是
我真的很想弄明白这一点,但是我的脸因为不断撞到这堵砖墙而受到伤害.

我正在尝试加载9个文本文件,每个文件由7行7个字符的矩阵组成,每个7个字符由空格分隔,然后将每个引用的矩阵保存到数组中的元素.我正在阅读每个文件中,但是当我访问我的数组时,所有元素都是相同的.我一直在寻找解决方案,我的问题在任何地方都没有得到解答,或者(更有可能)我不理解答案.这是我的代码的问题部分:

my @boardarray = (1,2,3,4,5,6,7,8,9);
sub LoadBoards {
    my (@board,$infile,@allboards);
    my $i = 1;
    @allboards = @boardarray;
    foreach (@allboards) {
        my $infile = "board" . $i . ".brd";
        open FILE,"< $infile" or die $!;
        my $line = 0;
        while (<FILE>) {
            chomp $_;
            my @chars = split (/ /,$_);
            $board[$line] = [@chars];
            $line++;
        }
    my $tempboard = @board;
        DisplayOneBoard($tempboard); print ("n");              #Test A
    $boardarray[$i-1] = @board;                                #Problem line?
        DisplayOneBoard($boardarray[$i-1]); print ("n");       #Test B
        DisplayOneBoard($boardarray[0]); print ("n----n");    #Test C
    $i++;
    }
}

– 我已经尝试将变量作为@boardarray的元素进行分配而没有任何变化.
– 我在foreach循环中使用@boardarray并将其更改为复制的@allboards而没有任何改进.
我希望’测试A’和’测试B’线是相同的,并且’测试C’线保持我加载的第一个矩阵.但是,对于每次迭代,所有三个都是相同的.
(对于迭代1,它们都是矩阵1.对于迭代2,它们都是矩阵2,等等)
最后,所有元素都是完全相同的矩阵(矩阵9).

任何援助将不胜感激.谢谢.

解决方法

问题是你每次循环都重复使用相同的@board.当您将该板的引用推送到@boardarray时,您每次都会推送指向相同@board的引用.修复很简单,只需将我的@board移动到foreach循环的内部;这样每次都会创建一个新的@board.

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读