Arrays 如何在Perl中打印@slice数组元素?
我有这部分代码来捕获散列中数组的较大值。当Perl确定最大值时,@slice array将删除该数组:Arrays 如何在Perl中打印@slice数组元素?,arrays,perl,hash,slice,Arrays,Perl,Hash,Slice,我有这部分代码来捕获散列中数组的较大值。当Perl确定最大值时,@slice array将删除该数组: 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'
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)分隔的信息,如以下列表所示:
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]中最小值的减法是否正确
您有一个数组,因此@ignored
的每个元素都是一个数组。符号$ignored[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
另一个生成相同输出的选项是用\t
连接所有值:
print join "\t", $key, @{ $ignored[0] }[ 0, 1 ];
完美、简单、实用的解决方案。谢谢!你的代码没有按你说的做<代码>最大值(映射$->[1],@$val)
确定AoA$val中数组第二个元素的最大值。然后忽略该最大值。$val
中的第二个数组复制到@slice
中,并在$val
中设置为undef
。(delete
对数组不起作用)
print join "\t", $key, @{ $ignored[0] }[ 0, 1 ];