각 키에 대해 HoAs와 루프를 만드는 코드를 작성 중입니다. 아래 스 니펫은 내가 겪고있는 문제의 기본 예를 보여줍니다.이미 존재하는 키 수정
#!/usr/bin/perl
use strict;
use warnings;
my @array1 = qw (1 1 3 4 5); # Note that '1' appears twice
my @array2 = qw (a b c d e);
my @array3 = qw (6 7 8 9 10);
my @array4 = qw (f g h i j);
my %hash;
push @{$hash{$array1[$_]}}, [ $array2[$_], $array3[$_], $array4[$_] ] for 0 .. $#array1;
for my $key (sort keys %hash) {
my ($array2, $array3, $array4) = @{$hash{$key}[-1]};
print "[$key] $array2\t$array3\t$array4\n";
}
출력 : 난 그냥 실현 고유하지 않은 한 키를 사용하고있다 (이 예 반대), 그래서 실제로 사용하고 데이터에 대한
[1] b 7 g
[3] c 8 h
[4] d 9 i
[5] e 10 j
, 위와 같이 non-uniqe 키를 오버라이드합니다. 나중에 이들 값을 정렬하기 위해 키로 주로이 값을 사용하고 있습니다.
내 질문은 다음 중 하나
A) 나는 그것을
또는
B를 수정할 수있는 경우에 각 키 unless (exists $hash{$array1})
에 대해 위의 작업)을 수행 할 수 있습니다에 의해 정렬하는 방법이 있나요 그 값들은 다른 비 중복 키를 사용할 수 있습니다.
감사합니다.
@FlyingFrog 종류입니다. 각 해시 키는 여러 값을 가질 수 있으므로 먼저 해당 키를 실제로 정렬하는 항목으로 배분해야합니다. 'my @actual_stuff; 내 $ 키 (키 해시 키) {내 $ val (@ {$ hash {$ key}}) {push @actual_stuff, [$ key, @ $ val]}}'에 대해. 그런 다음,'@ array3'의 값은 결과 항목의 인덱스 2에 있습니다 :'sort {$ a -> [2] <=> $ b -> [2]} @ actual_stuff'. – amon