आपको पता नहीं होना चाहिए कि std.algorithm.map
इस तथ्य से परे लौटता है कि यह एक ही शैली की एक श्रृंखला है (आगे, द्विपक्षीय, यादृच्छिक, आदि)। यह अधिकांश रेंज-आधारित कार्यों के साथ है। वे लगभग हमेशा एक नई रेंज लौटते हैं जो पारित किए गए एक या उसी प्रकार की रेंज को लपेटता है जैसा कि पारित किया गया था (उदा। map
पूर्व करता है; find
उत्तरार्द्ध करता है)। auto
का उपयोग करें:
ulong[] x = [1, 2, 3];
auto y = map!"a"(x);
रेंज map
द्वारा दिया आलसी है। यह तब तक कुछ नहीं करता जब तक कि आप इसे फिर से चालू न करें (फिर यह अंतर्निहित सीमा के प्रत्येक क्रमिक front
पर दिए गए फ़ंक्शन को कॉल करता है)। यह उस तरह से अधिक कुशल है (साथ ही अनंत श्रेणियों को सक्षम करना)। सटीक रिटर्न प्रकार आपके द्वारा पारित श्रेणी के प्रकार पर निर्भर करता है और map
पर स्थानीय है ताकि आप सीधे एक नहीं बना सकें।
typeof(map!"a"(x)) y = map!"a"(x);
हालांकि, अगर आप आम तौर पर केवल typeof
का उपयोग जब आप एक चर जो आप सीधे प्रारंभ नहीं कर सकते हैं की जरूरत है: आप प्रकार प्राप्त करने के लिए या तो auto
का उपयोग करने के प्रकार या typeof
अनुमान लगाने के लिए की जरूरत है। auto
लगभग हमेशा जाने का तरीका है।
आप map
का परिणाम से एक सरणी बनाने के लिए की जरूरत है (या किसी अन्य श्रृंखला से), तो std.array.array
का उपयोग करें:
ulong[] y = array(map!"a"(x));
आप सीमाओं के बारे में ज्यादा पता नहीं है, तो आप शायद पढ़ना चाहिए this। दुर्भाग्यवश, वर्तमान में dlang.org पर एक लेख नहीं है, लेकिन यह लिंक एक पुस्तक में एक अध्याय के लिए है, जिसे डी समुदाय के सदस्यों में से एक ने तुर्की में लिखा था और अंग्रेजी में अनुवाद कर रहा है, और इसमें काफी सीमाएं शामिल हैं कुंआ।
संपादित:
वाल्टर तेज हाल ही में विशेष रूप से प्रकार है जो एक समारोह के लिए स्थानीय लेकिन समारोह जो भी मदद मिल सकती आप प्रबुद्ध द्वारा लौटाए गए हैं के बारे में एक लेख लिखा था। उन्हें एक अच्छा नाम भी मिलता है: Voldemort Types in D
।
स्रोत
2012-05-03 20:35:16
"आपको पता या देखभाल नहीं की जानी चाहिए"। अगर मैं गलत हूं, तो कृपया मुझे सही करें, लेकिन अगर मुझे पता/देखभाल नहीं करना चाहिए, तो मेरा उदाहरण – dnsmkl
संकलित करना चाहिए मेरा मतलब है कि आपको यह नहीं पता होना चाहिए या उस पर ध्यान देना चाहिए कि आपको इसके बारे में जानने की जरूरत है कि यह एक श्रृंखला है एक ही शैली में पारित होने के समान ही। सटीक प्रकार 'मानचित्र' के लिए विशिष्ट है और ऐसा कुछ नहीं जिसे आप उपयोग करने जा रहे हैं। आप इस प्रकार का अनुमान लगाने के लिए 'ऑटो' का उपयोग करते हैं और एपीआई के साथ सीमा का उपयोग करते हैं। यदि आप इसे वास्तव में एक विशिष्ट प्रकार के रूप में चाहते हैं, तो आपको इसे उस प्रकार के रूप में परिवर्तित करना होगा जिसमें एक सीमा होती है और वह प्रकार उत्पन्न करेगा जो आप चाहते हैं (उदा। Std.array.array)। –
यह अप्राकृतिक लगता है कि मैप के परिणाम का उपयोग करने के लिए मुझे 'ऑटो' का उपयोग करने के लिए मजबूर किया गया है (भले ही मुझे लाज़ी eval और सामान पसंद है) वैसे भी, उत्तर के लिए धन्यवाद और लिंक – dnsmkl