【发布时间】:2016-12-12 08:42:58
【问题描述】:
- 创建后访问数组的每个元素中的哈希时遇到问题,但它给出了最后一个元素。我应该怎么做才能访问我的数组的所有元素?
- 当我想将哈希推送到数组时,我使用
{}而不是(),因为如果我不这样做,它会给我错误。当我使用 {} 时,它的外观如何?
@stem = ();
for ($i = 0; $i < 2; ++$i) {
push @stem, { u1 => 1, u2 => 2 , u3 => 3 };
}
@ants = ();
$count = 0;
for ($i = 0; $i < scalar(@stem); ++$i) {
@allowed = ();
%hash = ();
for ($j = 0; $j < scalar(@stem); ++$j) {
push @allowed, { stem => ++$count, hinfo => ++$count };
}
%hash = (allowed => \@allowed, solution => ++$count);
push (@ants, \%hash);
}
for ($i = 0; $i < scalar(@ants); ++$i) {
%test = %{$ants[$i]};
print "=>", $test{solution}, "\n";
@temp = @{$test{allowed}};
for ($j = 0; $j < scalar(@temp); ++$j) {
print $j, ":", $temp[$j]->{stem}, " ", $temp[$j]->{hinfo}, "\n";
}
}
输出:
=>21
0:16 16
1:18 18
2:20 20
=>21
0:16 16
1:18 18
2:20 20
【问题讨论】:
-
请您出示您的代码的 MCVE (minimal reproducible example)。特别是,我们需要与您所拥有的
@stems数组等价的东西。它不需要包含超过几个条目,并且可能不需要读取数据(手工制作数据结构)。 -
感谢更新,但不清楚我们从代码中知道
$length、@seq1、@seq2、@matrix是什么。 MCVE 允许我们运行您的代码。我们不应该花时间弄清楚你有什么。 -
为什么不把额外的信息写成:
my @seq1 = ('a','a','b'); my @seq2 = ('b','a','b'); my @matrix = ( [0,1,1], [1,1,0], [0,0,1], ); my $length = 2;?您是否使用use strict; use warnings;运行?没有它们我不会运行 Perl 代码。我只使用了 20 多年,而且我对它的了解还不够,不能冒险不使用它们。当我运行您的代码时,我被告知if($matrix[$i+$w][$j+$w] eq "."){++$count;}行正在越界访问数组。此外,如果数组包含 0 和 1 值,那么元素何时会等于"."? -
sorry...我重写代码你可以运行它...我不用
use strict; use warnings有必要用吗??? ...对于矩阵,它包含空格和点,但我没注意抱歉 -
养成同时使用它们的习惯——总是。目前在这里可能无关紧要,但安全总比抱歉好。没有它们,我不会在 SO 上发布 Perl 代码——没有它们,我太冒险了。