2010-04-30 14 views
5

मैं सोच रहा था कि पर्ल में foreach कथन लगातार क्रम में एक सरणी में आइटम पुनरावृत्त करता है? यही है, अगर मैं एक ही सरणी या सूची पर कई बार फ़ोरैच का उपयोग करता हूं तो क्या मुझे अलग-अलग परिणाम मिलते हैं?क्या foreach कथन क्रम में पुनरावृत्त करता है या यह यादृच्छिक क्रम हो सकता है?

उत्तर

9

हां, foreach कथन में आइटम क्रमशः पुनरावृत्त किए गए हैं।

आपका प्रश्न एक हैश के तत्वों से अधिक बार-बार दोहराना से अधिक भ्रम की स्थिति से पैदा हो सकता है:

my %hash = ('a' => 1, 'b' => 2, 'c' => 3); 
foreach my $key (keys %hash) { print $key } ; # output is "cab" 

लेकिन मालूम होता है यादृच्छिक क्रम कैसे डेटा एक पर्ल हैश में (डेटा एक पर्ल हैश तालिका में जमा हो जाती है की एक विरूपण साक्ष्य है तालिका का आदेश नहीं दिया जाता है)। यह keys कथन है जो हैश तालिका के क्रम को "बदल रहा है", foreach नहीं।

+1

बस पंडिताऊ होने के लिए, 'keys' हैश तालिका के क्रम में परिवर्तन नहीं होता है - अगर आप' कुंजी फोन 'किसी भी कुंजी को डालने या हटाने के बिना उसी हैश पर बार-बार, यह हर बार एक ही क्रम में चाबियाँ वापस कर देगा। पहले स्थान पर डेटा को संग्रहीत करने के कार्य द्वारा ऑर्डर बदला जा रहा है। हैश डेटा को उस क्रम में संग्रहीत करता है जो निर्धारक है, लेकिन अप्रत्याशित (इसे सबसे व्यावहारिक उद्देश्यों के लिए प्रभावी रूप से अनियमित बना रहा है)। –

+1

बस संबंधित प्रश्न के लिए एक लिंक जोड़ना: [क्या पर्ल लगातार क्रमशः हैश कुंजी वापस करने की गारंटी है? - स्टैक ओवरफ़्लो] (http://stackoverflow.com/questions/1256502/is-perl-guaranteed-to-return-consistently-ordered-hash-keys) – sdaau

1

यदि आप समय के बीच में सूची नहीं बदलते हैं, तो यह हमेशा एक सतत क्रम में होगा।

0

क्यों पर्ल के foreach पाश हैश आदेश मालूम होता है यादृच्छिक है के लिए तर्क perlsec दस्तावेज़ में है, जुड़ा हुआ here

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