// names is string[]
Person[] people = names.Select(s => new Person(s)).ToArray();
स्पष्टीकरण:
Enumerable.Select
प्रक्षेपण के लिए LINQ विधि है। यही है, Foo
एस का अनुक्रम लेना और उन्हें Bar
एस पर कुछ नियम Func<Foo, Bar>
के माध्यम से पेश करना जो Foo
एस खाता है और Bar
s निकालता है। इस प्रकार
names.Select(s => new Person(s))
प्रकार IEnumerable<Person>
के अनुक्रम के लिए प्रकार IEnumerable<string>
के अनुक्रम names
का अनुमान है। यदि आप कार्यात्मक प्रोग्रामिंग जानते हैं तो यह map
की भूमिका निभाता है।
अब, यहां एक सूक्ष्म बिंदु है जो समझने योग्य है; यह लगभग निश्चित रूप से LINQ के सबसे महत्वपूर्ण लेकिन आसानी से गलत समझा पहलुओं में से एक है। यह स्थगित निष्पादन की अवधारणा है। जब हम कहते हैं
IEnumerable<Person> persons = names.Select(s => new Person(s));
यह वास्तव में प्रक्षेपण (यानी, वह अभी तक Person
के उदाहरण निर्माता पैरामीटर के रूप में names
में string
रों का प्रयोग कर बनाया पैदा नहीं करता) प्रदर्शन नहीं करता। इसके बजाए, यह कुछ ऐसा बनाता है जो अनुक्रम names
को Person
के अनुक्रम में प्रोजेक्ट करने का नियम कैप्चर करता है। यह केवल तभी होता है जब उस नियम (जिसे पुनरावर्तक के रूप में जाना जाता है) वास्तव में निष्पादित किया जाता है, प्रक्षेपण होता है।
इस निष्पादन का कारण बनने का एक तरीका है Enumerable.ToArray
विधि का उपयोग करना जो मूल रूप से अनुक्रम के माध्यम से पुनरावृत्ति करता है और मुझे परिणाम को सरणी के रूप में वापस देता है।
निष्पादन का कारण बनने के अन्य तरीके हैं। उदाहरण के लिए
IEnumerable<Person> persons = names.Select(s => new Person(s));
foreach(Person p in persons) {
Console.WriteLine(p.Name);
}
या
IEnumerable<Person> persons = names.Select(s => new Person(s));
Person p = persons.First();
जो "पहली" प्रक्षेपण (अर्थात, new Person(names[0]
)) निष्पादित और p
लिए परिणाम आवंटित होगा।
बेशक, यह भी वास्तव में क्या
s => new Person(s)
है में नहीं मिलता है। यह एक लैम्ब्डा अभिव्यक्ति है, और आप How does this LINQ Expression work? के उत्तर में उनके लिए एक परिचय प्राप्त कर सकते हैं।
प्राप्त करने के लिए आप सूची के माध्यम से लूप करेंगे, अब मैं F # में 'map' की बजाय 'select' को देखकर उलझन में हूं। – ChaosPandion
काफी आसान है! धन्यवाद!! –
@ChosPandion: हाँ, मुझे यह जानना अच्छा लगेगा कि उदाहरण के लिए 'चयन' और' कुल 'के बजाय अधिक परिचित' मानचित्र 'और' गुना 'का उपयोग क्यों नहीं किया गया था। – jason