के रूप में मार्टिन आर lazy()
एक मध्यवर्ती सरणी के निर्माण से बचा जाता है का उल्लेख किया। हालांकि अगर मैं विभिन्न आकारों के सरणी पर फ़ंक्शन के निष्पादन समय की तुलना करता हूं तो आपको लगता है कि lazy()
"केवल" 10% तेज है।
दिलचस्प बात यह है कि आप पाते हैं कि lazy()
200 से कम तत्वों के साथ सरणी के लिए 2 गुना तेज है और अधिक तत्वों के साथ रूपांतरण के बिना फ़ंक्शन के रूप में लगभग उतना तेज़ होता है (10% तेज)।
((संकलित) स्रोत फ़ाइलों के रूप में एक खेल का मैदान में Xcode 6.4 और Xcode 7 के साथ परीक्षण किया गया वैश्विक कार्य करता है और प्रोटोकॉल एक्सटेंशन के साथ)
तो lazy()
बल्कि Sequences
के लिए इस्तेमाल किया जाएगा, जहाँ आप अगर यह परिमित है पता नहीं है । फिर, छोरों के लिए संभावना break
या return
साथ किया जाता है:
for element in lazy(sequence).map{ ... } {
if element == 1000 {
break
}
// use element
}
यदि आप एक अनंत Sequence
(जैसे 1,2,3 ...) निष्पादन नक्शे पर फोन भी अनंत होगा। lazy()
के साथ परिवर्तन और निष्पादन "देरी" हो जाता है इस प्रकार आप अंतिम तत्व से पहले लूप से बाहर निकलने पर "बड़े" और अनंत अनुक्रमों को अधिक कुशलता से संभाल सकते हैं।
वैसे, 'flatMap (परिवर्तन: जेनरेटर.एमेंटमेंट -> यू?) -> [यू] 'अब स्विफ्ट 2 मानक लाइब्रेरी में उपलब्ध है :) – jtbandes