簡體   English   中英

按鍵對Perl中的哈希數組排序

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM