1

コードのこの部分には、ハッシュに浸された配列のより大きな値をキャッチするためのものがあります。Perlが最大値を識別した場合、配列は@slice配列によって削除されます。

if ( max(map $_->[1], @$val)){
my @slice = (@$val[1]);             
my @ignored = @slice;
delete(@$val[1]);
print "$key\t @ignored\n";
warn Dumper \@slice; 

}

データ:ダンパーアウト:

$VAR1 = [ [ '3420', '3446', '13', '39', 55 ] ];

これらの情報をタブ(\ t)で区切って次のリストのように1行に印刷したいと思います。

miRNA127 dvex589433 -    131     154
miRNA154 dvex546562 +    232     259    
miRNA154 dvex573491 +    297     324    
miRNA154 dvex648254 +    147     172
miRNA154 dvex648254 +    287     272
miRNA32 dvex320240 -     61  83
miRNA32 dvex623745 -     141     163
miRNA79 dvex219016 +     ARRAY(0x100840378)

しかし、最後の行では常にこの結果を取得します。

この出力を生成するにはどうすればよいですか?:

miRNA127 dvex589433 -    131     154
miRNA154 dvex546562 +    232     259    
miRNA154 dvex573491 +    297     324    
miRNA154 dvex648254 +    147     172
miRNA154 dvex648254 +    287     272
miRNA32 dvex320240 -     61  83
miRNA32 dvex623745 -     141     163
miRNA79 dvex219016 +     3420    3446

追加の説明:この場合、$ VAR-> [1]で最大値を取得し、$ VAR-> [0]で最小値の減算が<=から55であるかどうかを確認します。そうでない場合は、次のことを行う必要があります。このAoA(最大値)を削除し、@ignored配列に入力します。次に、リストのように、@ignoredの値をいくつか出力します。次に、結果のAoAを使用して、最後のフローを繰り返します...

4

1 に答える 1

2
print "$key\t $ignored[0]->[0]\t$ignored[0]->[1]";

配列の配列があるため、 の各要素@ignoredは配列です。この表記法$ignored[0]は、0 番目の要素 (配列) に到達し、その配列の 0 番目と最初の要素を取得します->[0]->[1]

例えば:

use strict;
use warnings;
use Data::Dumper;

my @ignored;
$ignored[0] = [ '3420', '3446', '13', '39', 55 ];
my $key = 'miRNA79 dvex219016 +';

print Dumper \@ignored;
print "\n";

print "$key\t$ignored[0]->[0]\t$ignored[0]->[1]";

出力:

$VAR1 = [
          [
            '3420',
            '3446',
            '13',
            '39',
            55
          ]
        ];

miRNA79 dvex219016 +    3420    3446

同じ出力を生成する別のオプションは、次joinのすべての値に対するものです\t

print join "\t", $key, @{ $ignored[0] }[ 0, 1 ];
于 2013-02-12T03:53:53.943 に答える