2010-06-08 12 views
9

मैं हैश के सम्मिलन आदेश को याद रखने के लिए IxHash का उपयोग कर सकता हूं।मैं नेस्टेड पर्ल हैश के सम्मिलन आदेश को कैसे बनाए रख सकता हूं?

use Tie::IxHash; 

my %hash; 
tie(%hash, 'Tie::IxHash'); 
%hash = (
    x => 10, 
    z => 20, 
    q => { a1 => 1, a3 => 5, a2=>2,}, 
    y => 30, 
); 

printf("keys %s\n", join(" ", keys %hash)); 

=> keys x z q y 

नेस्टेड हैश के बारे में कैसे?

printf("keys %s\n", join(" ", keys %{$hash{q}})); 
keys a2 a1 a3 

मुझे संदेह है कि उत्तर है कि q हैश अज्ञात है और IxHash इसे देखने से पहले ऑर्डर खो गया है।

मुझे पता है कि मैं $ हैश {q} पर टाई कर सकता हूं और फिर तत्व जोड़ सकता हूं, लेकिन मुझे हैश बनाने के लिए एकल असाइनमेंट का उपयोग करना पसंद है।

क्या कोई चाल है?

उत्तर

11

, यह करने के लिए कई तरीके हैं मैं सिर्फ इतना है कि इसके इनलाइन का उपयोग करने के लिए आसान एक सबरूटीन में टाई लपेट होगा:

use Tie::IxHash; 

sub ordered_hash (%) { 
    tie my %hash => 'Tie::IxHash'; 
    %hash = @_; 
    \%hash 
} 

और उसके बाद:

tie my %hash => 'Tie::IxHash'; 

%hash = (
    x => 10, 
    z => 20, 
    q => ordered_hash(a1 => 1, a3 => 5, a2=>2), 
    y => 30, 
); 

(%) प्रोटोटाइप subroutine पर perl बताता है कि यह

तत्वों की एक संख्या के साथ एक सूची लेता है
संबंधित मुद्दे