Создайте хеш с двумя массивами, Hash, который имеет ключ к значениям массива - PullRequest
0 голосов
/ 11 октября 2018

У меня есть 2 массива, которые я хочу использовать для создания хэша

use warnings;
use strict;
use List::MoreUtils;
use Tie::IxHash;    

my %KEY_VALUE;
tie %KEY_VALUE,'Tie::IxHash';

my @KEY= qw(
0
0
5
1
1
1
2
2
2
2
3
4
);

my @VALUE= qw(
A
B
C
D
E
F
G
H
I
J
K
L
);

@KEY_VALUE{@KEY}=@VALUE;

print join("\t",%KEY_VALUE);

Результат, который я получаю:

0   B   5   C   1   F   2   J   3   K   4   L

Это потому, что значение% KEY_VALUEпродолжайте обновлять как, в этом случае он может иметь только 1 ключ и 1 значение.

Итак, я хотел бы знать, существует ли метод, позволяющий сохранить все значения с соответствующими ключами.

Ожидаемый результат:

0   A   B   5   C   1   D   E   F   2   G   H   I   J   3   K   4   L

Ответы [ 2 ]

0 голосов
/ 11 октября 2018

Просто поместите значения в ссылку на массив, сохраненную под каждым ключом.Вы не можете вывести структуру напрямую.

#!/usr/bin/perl
use warnings;
use strict;

use Tie::IxHash;

tie my %key_value,'Tie::IxHash';

my @keys   = qw( 0 0 5 1 1 1 2 2 2 2 3 4 );
my @values = qw( A B C D E F G H I J K L );

push @{ $key_value{ $keys[$_] } }, $values[$_] for 0 .. $#keys;

print join ' ', map "$_ @{ $key_value{$_} }", keys %key_value;
0 голосов
/ 11 октября 2018

Похоже, вам нужен хеш, где значения являются массивами, содержащими все значения, соответствующие заданному ключу из этих двух массивов?Как то так:

#!/usr/bin/perl
use warnings;
use strict;
use Tie::IxHash;
# Install from CPAN or your OS's package manager; not a core module
use List::MoreUtils qw/each_array/;

tie my %KEY_VALUE,'Tie::IxHash';    
my @KEY = qw(0 0 5 1 1 1 2 2 2 2 3 4);
my @VALUE = qw(A B C D E F G H I J K L);

my $ea = each_array @KEY, @VALUE;
while (my ($k, $v) = $ea->()) {
  push @{$KEY_VALUE{$k}}, $v;
}

while (my ($k, $av) = each %KEY_VALUE) {
  print "$k @$av ";
}
print "\n";
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...