使用其他约束在循环中减去perl

时间:2012-06-27 16:13:53

标签: perl

我想从while fetchrow中的数组中获取值...如果这是有道理的。 继承我的代码和输出以帮助解释

while (@data = $STH2->fetchrow_array()) {

                           print "<tr>";
                           print "<td>$_</td>" for @data[0,1];

                           print "</tr>";

并输出

$data[0]   |  $data[1]
   1       |    1000
   1       |    400
   12      |    500
   12      |    150   

(每个$data[0]只输出2个值)

我想要做的是为每个不同的$data[1]值减去彼此的2 $data[0]值(即1000-400),然后打印出来。我无法弄清楚如何做到这一点,谢谢你的帮助。

2 个答案:

答案 0 :(得分:1)

只需捕获数组引用的哈希值,然后稍后进行减法(警告:未经测试):

my %data_hash=(); #keys: $data[0], values: array ref of $data[1] corresponding to $data[0]

while(@data=$STH2->fetchrow_array)
{
  push @{$data_hash{$data[0]}},$data[1];
}

foreach(sort{$a<=>$b}(keys %data_hash))
{
  print "<tr>";
  print "<td>$_</td>";
  my $diff=$data_hash{$_}->[0] - $data_hash{$_}->[1];
  print "<td>$diff</td>";
  print "</tr>";
}

答案 1 :(得分:1)

似乎散列符合您的目的。 $ data [0]是关键,$ data [1]是值。

类似

my %data;
while (@data = $STH2->fetchrow_array()) {
  if (undefined $data{$data[0]}) {
    $data[$data[0]} = $data[1];
  } else {
    $data[$data[0] -= $data[1];
}