एक नेस्टेड हैश संरचना %old_hash
मान लें ..मैं एक नेस्टेड पर्ल हैश को एक गैर-घोंसले में कैसे साफ कर सकता हूं?
my %old_hash;
$old_hash{"foo"}{"bar"}{"zonk"} = "hello";
.. जो हम "समतल करने के लिए" (खेद है कि अगर गलत शब्दावली! है) एक गैर नेस्टेड हैश को उप &flatten(...)
ताकि का उपयोग कर चाहते हैं ..
sub flatten {
my $hashref = shift;
my %hash;
my %i = %{$hashref};
foreach my $ii (keys(%i)) {
my %j = %{$i{$ii}};
foreach my $jj (keys(%j)) {
my %k = %{$j{$jj}};
foreach my $kk (keys(%k)) {
my $value = $k{$kk};
$hash{$kk} = $value;
}
}
}
return %hash;
}
जबकि कोड छ:
my %h = &flatten(\%old_hash);
die unless($h{"zonk"} eq "hello");
&flatten(...)
की निम्नलिखित परिभाषा काम कर देता है iven काम यह बहुत पठनीय या साफ नहीं है।
मेरा प्रश्न है दो गुना:
- किन तरीकों से दिए गए कोड आधुनिक पर्ल सर्वोत्तम प्रथाओं के अनुरूप नहीं है में? कठोर रहो! :-)
- आप इसे कैसे साफ करेंगे?
कृपया 'flatten' से आपका क्या मतलब है इसका एक उदाहरण दें। मुझे समझ में नहीं आता कि आपका कोड क्या करने का प्रयास कर रहा है। –
साइनन: आपकी प्रतिक्रिया के लिए धन्यवाद। मैंने प्रश्न की शुरुआत में एक उपयोग उदाहरण जोड़ा है। उम्मीद है कि चीजों को स्पष्ट करें! – knorv
आप उदाहरण ** ** ** में मदद करते हैं: यदि हैश है (ए => {बी => 1}, सी => {बी => 2}) 'क्या होता है? –