2009-08-06 10 views
12

मैं लूप का उपयोग किये बिना पर्ल में हैश बी को हैश बी कैसे जोड़ूं?लूप का उपयोग किये बिना पर्ल में दो हैंश में कैसे शामिल हो सकता है?

+4

क्यों नहीं करते आप एक पाश का उपयोग करना चाहते हैं? –

उत्तर

30

आप अपने डेटा के मिलन ले मतलब है, तो बस कार्य करें:

%c = (%a, %b); 
+0

क्यों% a = (% a,% b); काम? % एक "मिटाया गया" – biznez

+3

यह मेरे लिए काम करता है: "% a = ('a' => 'b', 'c' => 1);% b = ('c' => 'd');% ए = (% ए,% बी); प्रिंट शामिल हों (',', मानचित्र {"'$ _' => \" $ {एक {$ _}} \ ""} कुंजी% ए), "\ n"; " एक ही कुंजी के साथ% बी के आइटम प्राथमिकता लेते हैं, लेकिन% के अन्य आइटम संघ के बाद मौजूद होते हैं। – outis

+4

@yskhoo: यह काम करता है। – ysth

23

तुम भी दूसरे में एक हैश विलय करने के लिए स्लाइस का उपयोग कर सकते हैं:

@a{keys %b} = values %b; 

ध्यान दें कि% ख में आइटम होगा % में आइटम को ओवरराइट करें जिसमें एक ही कुंजी हो।

+5

अतिरिक्त क्रेडिट के लिए, ए और बी में हैश रेफरी के साथ, हम @ {$ a} {keys% $ b} = मान% $ b करते हैं; – daotoad

+2

मुझे उम्मीद है कि यह दूसरे उत्तर की तुलना में अधिक कुशल होगा, क्योंकि वह पहले से मौजूद वस्तुओं के लिए हैश को भी पुनर्जीवित करता है, जबकि यह केवल नए आइटमों के लिए कुंजी जोड़ता है। यदि% बी की तुलना में% में कई आइटम थे, तो अंतर सम्मानजनक हो सकता है। – bart

+1

शायद। मेरा दृष्टिकोण भी दो बार बी बी चलता है। यदि% बी% से बड़ा है, तो दूसरी तकनीक तेज हो सकती है। सबसे तेज़ एक लूप हो सकता है, लेकिन ओपी उसे नहीं चाहता था। – outis

2

यह हैश को मर्ज करेगा और खाता अपरिभाषित प्रविष्टियों को भी ध्यान में रखेगा, इसलिए वे सामग्री को प्रतिस्थापित नहीं करते हैं।

my %hash = merge(\%hash1, \%hash2, \%hash3); 

sub merge { 
    my %result; 

    %result = %{ $_[0] }; 
    shift; 

    foreach my $ref (@_) { 
     for my $key (keys %{$ref}) { 
      if (defined $ref->{$key}) { 
       $result{$key} = $ref->{$key}; 
      } 
     } 
    } 

    return %result; 
} 
संबंधित मुद्दे

 संबंधित मुद्दे