Perl хэш хэшей

У меня есть файл со списком строк, таких как

на 12345 вводят значение 1 в "сигнал_А"
при 12345 введенное значение 0 до "signal_B"
на 12346 вводят значение 1 в "сигнал_А"
на 12348 вводят значение 1 в "сигнал_А"
при 12350 вводят значение 0 в "сигнал_А"
на 12354 вводят значение 0 в "сигнал_А"

Из этого файла я хочу прочитать до конца файла, и я хочу построить хэш хэшей что-то вроде

%tab = (
       12345 => {           
       signal => "signal_A",           
       value  => "1",        
     },

      12345 => {
       signal => "signal_B",
       value  => "1",
     },
);

Также я хочу повторить эту хэш-таблицу.

Буду очень признателен за вашу помощь.

1 ответ

У вас есть два элемента с одинаковым ключом. Эта структура данных не может существовать. Как насчет следующего:

%tab = (
   12345 => [
      {
         signal => "signal_A",           
         value  => "1",        
      },

      {
         signal => "signal_B",
         value  => "1",
      },
   ],
   12346 => [
      {
         signal => "signal_A",           
         value  => "1",        
      },
   ],
   ...
);

Вы использовали бы следующее, чтобы создать его

push @{ $tab{$id} }, { signal => $signal, value => $value };

Вы можете перебрать структуру, используя

for my $id (keys %tab) {
   for $event (@{ $tab{$id} }) {
      ...$event->{signal}...;
      ...$event->{value}...;
   }
}
Другие вопросы по тегам