如何在数组值更改时清空数组?

时间:2017-12-04 10:58:45

标签: perl

假设我有一个数组@atom。我正在推送三个元素$a$b$c(分别从pdb文件中提取的残留名称,链和残基编号)到该数组中。例如,$b的值为 AAAAAAAAA BBBBBBB CCCCCCC < /强> 的。每次$b更改时如何清空数组?

数组如下,

push(@atom,"$a $b $c");

2 个答案:

答案 0 :(得分:3)

当您只在其中存储单个值时,我不确定您使用数组的原因。您认为存储了三个值,但是在将它们存储到数组中之前,您将它们放在一个字符串中。

要在数组中存储三个值,可以使用以下代码:

my @atom = ($residue_name, $chain, $residue_number);

(请注意,我还更改了您的变量名。$a$b$c是变量的可怕名称,$a$b是特殊的Perl的变量,不应在随机代码中使用。)

我真的不知道你在这里做了什么,但在我看来,将这些数据存储在哈希中会更有意义。

my %atom = (
    residue_name   => $residue_name,
    chain          => $chain,
    residue_number => $residue_number,
);

当然,这只是猜测,因为我不知道您需要对数据做些什么 - 但编程的一个重要部分是使您的数据结构正确。

但是现在让我们假设您仍在使用原始数组并且您想要a)查看$chain变量是否已更改其值并且b)清空该数组点。您需要编写如下代码:

my @atom = ($residue_name, $chain, $residue_number);
# Store the current value of $chain
my $original_chain = $chain;

然后,稍后,您需要检查值是否已更改并采取适当的措施。

if ($chain ne $original_chain) {
  @atom = ();
}

当然,这只是最好的建议。我不知道你的代码是如何构建的。

答案 1 :(得分:1)

假设$ a $ b $ c在循环中被读取并被推入数组

const