मैं वर्तमान में एफ # सीख रहा हूं और मुझे वास्तव में yield!
(उपज-बैंग) ऑपरेटर पसंद है। न केवल इसके नाम के लिए बल्कि इसके लिए भी क्या करता है।एफ # उपज! ऑपरेटर - कार्यान्वयन और संभव सी # समकक्ष
yield!
ऑपरेटर मूल रूप से आपको अनुक्रम अभिव्यक्ति से अनुक्रम के सभी तत्वों को उपज करने की अनुमति देता है। यह गणक लिखने के लिए उपयोगी है। चूंकि मैं नियमित रूप से बड़े, जटिल गणनाकर्ताओं से मुकाबला करता हूं, इसलिए मुझे उन रणनीतियों में दिलचस्पी है जो हम उन्हें तोड़ने और उन्हें सरल समकक्षों से लिखने के लिए उपयोग कर सकते हैं।
दुर्भाग्यवश, yield!
ऑपरेटर सी # में उपलब्ध नहीं है। जहां तक मैं समझता हूँ, यह क्या करता है एक foreach (var x in source) yield x;
की तरह है, लेकिन पुस्तक मैं पढ़ रहा हूँ (Petricek's Real World F# - Manning) चलता है कि यह बेहतर प्रदर्शन किया है कि ...
- तो क्या एफ # संकलक यहाँ कर बिल्कुल करता है? (हाँ, मैं इसे परावर्तक का उपयोग करके भी देख सकता हूं लेकिन मैं तंत्र का अधिक विस्तृत विवरण प्राप्त करना चाहता हूं)।
क्रम सी # मैं कई तरीके का पता लगाया है, लेकिन उनमें से कोई yield!
ऑपरेटर के रूप में के रूप में संक्षिप्त है और मैं भी उनमें से जटिलता के बारे में यकीन नहीं है में एक ऐसी ही निर्माण को प्राप्त करने के। क्या कोई मेरी जानकारी दे सकता है अगर मेरे बिगओ नंबर सही हैं? कई निजी प्रगणक में
विघटित प्रगणक और उसके बाद सार्वजनिक प्रगणक से प्रत्येक तत्व उपज:
foreach (var x in part1()) yield x foreach (var x in part2()) yield x
यह प्रभावी रूप से प्रत्येक तत्व पर एक "डबल उपज" का परिणाम देगा। क्या वह ओ (2 एन) है? (या संभवतः बदतर?) वैसे भी, इस दृष्टिकोण का उपयोग करके मुझे अपने किसी भी उप-वर्ग से
yield break;
का उपयोग करने से रोक दिया जाता है। कई निजी प्रगणक और फिर concat सार्वजनिक प्रगणक के सभी निजी प्रगणक मेंविघटित प्रगणक:
return part1().Concat(part2())
मेरा मानना है कि यह ऊपर उल्लिखित समाधान क्योंकि
Concat()
तरह से मैं ऊपर उल्लिखित कार्यान्वित किया जाता है से अलग नहीं है।
कोई अन्य विकल्प?
कागज आप का हवाला देते हैं बताते हैं के रूप में, जब इस्तेमाल किया रिकर्सिवली कि ऐसे मामले हैं जहां 'उपज!' (जो सी # में काल्पनिक 'उपज foreach' के बराबर है) हे (एन) लेकिन' foreach ... उपज वापसी है। ..' ओ (एन^2) है। – kvb
@kvb: ठीक है, वह वही था जिसके बारे में मैं बात कर रहा हूं, क्षमा करें अगर यह स्पष्ट नहीं था। –