[英]Sort array of hashes in Perl by key
我定义了这样的哈希数组:
while (my $line = <PILEUP>) {
if ($line =~ /INDEL/ and $line !~ /^#/) {
chop $line;
my @splitline = split(/\t/, $line);
$hash2{$splitline[1]}{len} = length($splitline[4]);
$hash2{$splitline[1]}{type} = "INDEL";
push @{$hash1{$splitline[0]}}, %hash2;
}
}
然后,我想通过每个哈希的键对该数组进行排序:
for my $chr (keys %hash1) {
my @sorted = sort { $a->{ } <=> $b->{ } } @{%hash1{$chr}};
}
但是,不知道如何在这里继续。
我定义了这样的哈希数组:
不,你没有。 您可以像这样定义数组的哈希。
chop $line;
几乎在每种情况下都最好是chomp
。 在Perl编程的10年中,我只曾将chop
用作好奇心。
$hash2{$splitline[1]}{len} = length($splitline[4]);
$hash2{$splitline[1]}{type} = "INDEL";
push @{$hash1{$splitline[0]}}, %hash2;
在这里,你推键和值%hash2
到内部数组%hash1
。 您可能想推送哈希引用: \\%hash2
。 但是在这种情况下,您需要对其进行词法范围调整,否则它将多次推送相同的引用。
for my $chr (keys %hash1) {
my @sorted = sort { $a->{ } <=> $b->{ } } @{%hash1{$chr}};
}
这是正确的方向,只是您必须选择一个(或多个)哈希值进行排序。 例如长度和类型。 而且您不能使用循环。
my @sorted_keys = sort { $hash1{$a}{len} <=> $hash1{$b}{len} ||
$hash1{$a}{type} cmp $hash1{$b}{type} } keys %hash1;
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.