Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/perl/11.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
对散列的内部键进行排序Perl的散列_Perl_Sorting_Hashmap - Fatal编程技术网

对散列的内部键进行排序Perl的散列

对散列的内部键进行排序Perl的散列,perl,sorting,hashmap,Perl,Sorting,Hashmap,我正在尝试根据数字键对嵌套哈希进行排序。在下面的代码中,$keys(第一级)很容易排序,我试图找到一个关于对哈希的$position(第二级)排序的答案。请参考下面的Data::Dumper代码段。 如果问题需要进一步澄清,请告诉我。 谢谢 预期产出: 1 16977 G A 0.0310014 1 66442 C T 0.0171221 1 77089 T A 0.001 在我看来,您正在按排序顺序迭代第二级哈希。我运行您的代码(仅修改为转到标准输出): 这与预期的输出不同,因为它包含

我正在尝试根据数字键对嵌套哈希进行排序。在下面的代码中,$keys(第一级)很容易排序,我试图找到一个关于对哈希的$position(第二级)排序的答案。请参考下面的Data::Dumper代码段。 如果问题需要进一步澄清,请告诉我。
谢谢

预期产出:

1  16977 G A 0.0310014
1  66442 C T 0.0171221
1  77089 T A 0.001
在我看来,您正在按排序顺序迭代第二级哈希。我运行您的代码(仅修改为转到标准输出):


这与预期的输出不同,因为它包含$ref_min值,并且前两列后面的列顺序不同(因为它们是根据位置排序的)。您希望有什么不同的行为?

问题是什么?排序哈希的第二级($position)您的代码似乎正确:
对于我的$position(排序{$a$b}键%{$process{$keys}})
。你得到了什么样的结果,你期望得到什么样的结果?那么,是什么问题导致你提出这个问题呢?
 $VAR1 = '1';
 $VAR2 = {
      '16977' => {
                   'G' => {
                            'A' => '0.0310014'
                          }
                 },
      '77089' => {
                   'C' => {
                            'T' => '0.0171221'
                          }
                 },
      '66442' => {
                   'T' => {
                            'A' => '0.0017295'
                          }
                 },
1  16977 G A 0.0310014
1  66442 C T 0.0171221
1  77089 T A 0.001
use strict;
use warnings;

my %process = (
    '1' => {
      '16977' => {
                   'G' => {
                            'A' => '0.0310014'
                          }
                 },
      '77089' => {
                   'C' => {
                            'T' => '0.0171221'
                          }
                 },
      '66442' => {
                   'T' => {
                            'A' => '0.0017295'
                          }
                 },
    },
);

my @array=();
foreach my $keys(sort({ $a <=> $b }keys %process)){
  foreach my $position(sort({ $a <=> $b } keys %{$process{$keys}})){
    foreach my $reference(keys %{$process{$keys}{$position}}){
     my %min=();
     my @arr1=();
     while(my($allele,$frequency)=each %{$process{$keys}{$position}{$reference}}){
        push(@arr1, "$keys\t$position\t$reference\t$allele\treference_val\t$frequency\n");
        $min{1-$frequency}=1;
     }
     my $ref_min=(sort{$min{$b} <=> $min{$a}} keys %min)[0];
     s/reference_val/$ref_min/g for @arr1;
     push(@array,@arr1);
    }
  }
}
foreach(@array){
 chomp;
 print STDOUT $_,"\n";
}
1   16977   G   A   0.9689986   0.0310014
1   66442   T   A   0.9982705   0.0017295
1   77089   C   T   0.9828779   0.0171221