Json'dan alınan karmaların bir hash'ım var ve karma, grup ve baskı değerlerini düzleştirmeye çalışıyorum. Yani, her bir anahtar1 grubu için tüm tuşlar ve ilgili değerler. Aşağıdaki kodu kullanarak perlde bunu elde etmek için çalışıyorum, ancak her bir ID ve isimleri tek tek değerlerle değil, gruplanmış değerleri basıyor. Anahtarları ve değerleri nasıl gruplandıracağımı ve yazdıracağım konusunda bana yardım edebilir misiniz?hashların perl hash değeri - dolandırıcılı anahtar grubu iç anahtarları ve ilgili değerler için
veri:
VAR1= {
'ID1' => {'Name1' => {'Address1' => {'Mod1' => ['pol1']}},
Name2' => {'Address1' => {'Mod2' => ['pol2']}}},
'ID2' => {'Name3' => {'Address3' => {'Mod3' => ['pol3']}}},
'ID3' => {'Name4' => {'Address4' => {'Mod4' => ['pol1, pol2, pol3']}}}
}
Beklenen Çıktı:
ID1 => [Name1,Address1,mod1(pol1), Name2,Address1,mod2(pol2)],
ID2 => [Name3,Address3,mod3(pol3)],
ID3 => [Name4,Address4,mod4(pol1,pol2,pol3)]
Kod1:
for my $id (@id_list) {
foreach my $item (sort (slurp(\%{$new{$id}}))) {
my $data = join(',', @$item);
print "data.. $data\n";
push(@results,$data);
}
}
print map {"$_"} @results;
kodu2:
foreach my $id (sort keys %new){
foreach my $name (keys %{$new{$id} }) {
foreach my $address (keys %{$new{$id}{$name}}) {
foreach my $mod (keys %{$new{$id}{$name}{$address}) {
foreach my $value (@{$new{$id}{$name}{$address}{$mod}}) {
my $sp = ":";
my $reasons = join(',',$id,$name,$address,$mod,$value.$sp);
push (@rea, $reasons);
}
}
}
}
}
Beklenen çıktınızı açıklayabilir misiniz? Yaptığınız şey bir karma gibi görünüyor, tuşlar orijinal üst düzey anahtarlar ve dizi-referanslar olmakla birlikte - ama "_mod (pol) _" buna uymuyor. – zdim
@zdim, Eğer doğru anlarsam, modun (pol) anahtar ve değer olmadığını söylüyorsunuz. evet doğru, üst düzey anahtarlardan oluşur ve değerler listedir. benim $ değerinim ((@ {$ new {$ id} {$ name} {$ address} {$ mod}}) ilgili "mod" un beklenen "pol" değerini döndürüyor. – Sampath
İkinci kodunuz neredeyse doğru - '$' 'döngüsünde bir' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' 'dır. Bu içeriğe sahip bir dize olması gerekiyordu, '' mod1 (pol1) ''? Ne yazılır geçerli değil Perl. – zdim