Сортировка хэша хэшей массива массивов в Perl

Я сделал хэш (%locus) для организации своих данных, когда я печатаю его с помощью Data::Dumper, он показывает структуру данных:

'locus8 >9.2668516.276570.GABA3.1.54.6586237.218516.2718570 74280 74440 locus8' 
 => {    
 '3 70.75 0.995018 -1.89 -' => [          
   [                                                                           
    'window10',                                                'locus8',         
    '>9.2668516.2768570.GABA3.1.54.6586237.2718516.2718570', '74280',      
     '74400',                                                  '-',              
    '3',                                                      '120',        
    '55.87',                                                  '-17.41',         
    '-11.92',                                                 '-10.60',         
    '-1.32',                                                  '1.57',           
    '-1.58',                                                  '0.68',           
    '2.76',                                                   '0.995018'        
    ],                                                                          
    [                          
      'window11',                                                'locus8',   
      '>9.2668516.276570.GABA3.1.54.6586237.218516.2718570', '74320',          
      '74440', '-', '3', '120', '70.75', '-22.97', '-17.28', '-15.07', '-2.21', 

      '-1.89', '0.75', '1.95', '0.976184'                                       
    ]  
  ]                                                                             
  },

Как я могу отсортировать внутренние массивы по последнему элементу в массивах $_[17]?

[                                                           
  [
    'window11',                                                'locus8',
    '>9.+.2668516.2768570.GABA3.1.54.6586237.2718516.2718570', '74320',
    '74440',                                                   '-',
    '3',                                                       '120',
    '70.75',                                                   '-22.97',
    '-17.28',                                                  '-15.07',
    '-2.21',                                                   '1.55',
    '-1.89',                                                   '0.75',
    '1.95',                                                    '0.976184'
  ],
  [
    'window10',                                                'locus8',
    '>9.+.2668516.2768570.GABA3.1.54.6586237.2718516.2718570', '74280',
    '74400',                                                   '-',
    '3',                                                       '120',
    '55.87',                                                   '-17.41',
    '-11.92',                                                  '-10.60',
    '-1.32',                                                   '1.57',
    '-1.58',                                                   '0.68',
    '2.76',                                                    '0.995018'
  ],
]

Я хочу сохранить структуру данных, но с организованными «внутренними массивами». Заранее спасибо.


person Cristian Velandia    schedule 14.03.2015    source источник
comment
Вы должны более подробно указать свои требования, что у вас есть и что вы хотите, и меньше в богатстве ваших данных, что отталкивает людей от ответа вам, потому что они не могут видеть общую картину. Как будто у меня есть {foo=>{bar=>[[1,2,3],[4,5,0]]}} и я хочу {foo=>{bar=>[[4,5,0],[1,2,3]]}}. Вы видите разницу?   -  person Hynek -Pichi- Vychodil    schedule 14.03.2015
comment
Вам нужно отформатировать пример кода в вашем вопросе более подходящим образом - код в основном невидим из-за боковой прокрутки и слишком глубоких отступов. Вы можете попробовать выполнить против него perltidy, чтобы все исправить, или использовать краткие параметры для Data::Dump, если вы выводите сам хэш %locus.   -  person G. Cito    schedule 14.03.2015


Ответы (1)


Я просто пытаюсь угадать, что вы ищете, потому что вы не ясно, что вы хотите.

for my $outher (values %hash) {
    for my $inner (values %$outher) {
        @$inner = sort {$a->[17] <=> $b->[17]} @$inner;
    }
}
person Hynek -Pichi- Vychodil    schedule 14.03.2015