सी # / लाइनक: IEnumerable में प्रत्येक तत्व के लिए एक मैपिंग फ़ंक्शन लागू करें?


107

मैं एक IEnumerable के प्रत्येक तत्व को मैपिंग फ़ंक्शन (एक लाइनक-संगत तरीके से) का उपयोग करके किसी और चीज़ में बदलने का एक तरीका ढूंढ रहा हूं, लेकिन मुझे कुछ भी नहीं मिला है।

एक (बहुत ही सरल) उदाहरण के लिए, यह कुछ ऐसा करने में सक्षम होना चाहिए

IEnumerable<int> integers = new List<int>() { 1, 2, 3, 4, 5 };
IEnumerable<string> strings = integers.Transform(i => i.ToString());

लेकिन मुझे कुछ नहीं मिला। मेरा मतलब है, यह एक विस्तार विधि लिखने के लिए बहुत सरल है जो इसे पूरा करता है (मूल रूप से, इसके लिए सभी आवश्यक है कि स्रोत गणक को एक नई कक्षा में लपेट दिया जाए और फिर कॉल को प्रस्तुत करने के लिए बॉयलरप्लेट कोड का एक सा लिखना), लेकिन मुझे उम्मीद होगी यह एक काफी प्राथमिक ऑपरेशन होना है, और इसे लिखना खुद को पहिया को फिर से मजबूत करने जैसा लगता है - मैं इस भावना को हिला नहीं सकता कि एक अंतर्निहित तरीका हो सकता है जिसका मैं उपयोग कर रहा हूं, और मैं सिर्फ देखने के लिए अंधा हो गया हूं यह।

तो ... क्या लिनक में कुछ ऐसा है जो मुझे ऊपर वर्णित किए गए कार्यों को करने की अनुमति देता है?


जवाबों:


172

आप Select()एक्सटेंशन विधि का उपयोग कर सकते हैं :

IEnumerable<int> integers = new List<int>() { 1, 2, 3, 4, 5 };
IEnumerable<string> strings = integers.Select(i => i.ToString());

या LINQ सिंटैक्स में:

IEnumerable<int> integers = new List<int>() { 1, 2, 3, 4, 5 };

var strings = from i in integers
              select i.ToString();

4
आह! मुझे पता था कि एक रास्ता बनना होगा। थोड़ी पुरानी "फ़ॉरेस्ट / ट्रीज़ विज़ुअल ओफ़ेक्शन प्रॉब्लम", मुझे लगता है :)
एंड्रियास बाउस

2
इस बात से अवगत रहें कि यदि आपके नक्शे में दुष्परिणाम हैं, तो आप मुसीबत में पड़ सकते हैं, क्योंकि Select()जरूरी नहीं कि शरीर को तब तक क्रियान्वित न किया जाए, जब तक कि उसकी गणना न हो जाए। ऐसा नहीं है कि ऐसा करने के लिए एक महान विचार है, लेकिन कुछ परिस्थितियां हो सकती हैं जहां आपको ToList()पूरी सूची का मूल्यांकन करने के लिए इसे मजबूर करने की आवश्यकता हो सकती है ।
दवे निकोल

6
क्या एक फॉर्म को 'linq query syntax' और दूसरे फॉर्म को 'linq method syntax' कहना सही नहीं है?
रयान हरमुथ

2
वास्तव में दोनों Linq सिंटैक्स प्रकार हैं, पहले एक को विधि सिंटैक्स कहा जाता है और दूसरे को क्वेरी सिंटैक्स कहा जाता है। और पढ़ें: docs.microsoft.com/en-us/dotnet/csharp/programming-guide/…
मचाडो

27

आप वह खोज रहे हैं Selectजिसका उपयोग इनपुट अनुक्रम को बदलने के लिए किया जा सकता है:

IEnumerable<string> strings = integers.Select(i => i.ToString());

9
निष्पक्ष होना माना जाता है कि यह एसक्यूएल से मेल खाता है (जहाँ शब्दों का उत्तरार्द्ध सामान्य शब्दावली है)
éclairevoyant

5
यह बहुत कष्टप्रद है। मैं फंक्शनल प्रोग्रामिंग सीखने की कोशिश कर रहा हूँ ... लेकिन LINQ के 10 साल पूरे करने होंगे। मुझे अनुवाद मार्गदर्शिका चाहिए। मुझे आश्चर्य है कि Google अनुवाद मदद कर सकता है ...
डैमियन सॉयर
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.