खोज…


टिप्पणियों

धाराएँ संयोजी, आलसी enumerables हैं।

उनके आलस्य के कारण, धाराएँ बड़े (या अनंत) संग्रह के साथ काम करते समय उपयोगी होती हैं। जब एनम के साथ कई कार्यों का Enum , मध्यवर्ती सूचियां बनाई जाती हैं, जबकि Stream गणनाओं का एक नुस्खा बनाता है जिसे बाद के क्षण में निष्पादित किया जाता है।

कई ऑपरेशन का पीछा करते हुए

Stream विशेष रूप से तब उपयोगी होती है जब आप एक संग्रह पर कई ऑपरेशन चलाना चाहते हैं। ऐसा इसलिए है क्योंकि Stream आलसी है और केवल एक पुनरावृत्ति करता है (जबकि Enum कई पुनरावृत्तियों करेगा, उदाहरण के लिए)।

numbers = 1..100
|> Stream.map(fn(x) -> x * 2 end)
|> Stream.filter(fn(x) -> rem(x, 2) == 0 end)
|> Stream.take_every(3)
|> Enum.to_list

[2, 8, 14, 20, 26, 32, 38, 44, 50, 56, 62, 68, 74, 80, 86, 92, 98, 104, 110,
 116, 122, 128, 134, 140, 146, 152, 158, 164, 170, 176, 182, 188, 194, 200]

यहाँ, हमने 3 ऑपरेशन ( map , filter और take_every ) को जंजीर दिया, लेकिन Enum.to_list को कॉल करने के बाद ही अंतिम पुनरावृत्ति हुई।

Stream आंतरिक रूप से क्या करता है, यह है कि यह तब तक इंतजार करता है जब तक कि वास्तविक मूल्यांकन की आवश्यकता न हो। इससे पहले, यह सभी कार्यों की एक सूची बनाता है, लेकिन एक बार मूल्यांकन की आवश्यकता होती है, यह संग्रह के माध्यम से एक बार जाता है, प्रत्येक आइटम पर सभी कार्यों को चलाता है। यह Enum तुलना में अधिक कुशल बनाता है, जो इस मामले में उदाहरण के लिए 3 पुनरावृत्तियों करेगा।



Modified text is an extract of the original Stack Overflow Documentation
के तहत लाइसेंस प्राप्त है CC BY-SA 3.0
से संबद्ध नहीं है Stack Overflow