2008-10-28 4 views
8

मैं सी # 3.0 की नई सामग्री के साथ खेल रहा हूं और मेरे पास यह कोड है (ज्यादातर MSDN से लिया गया है) लेकिन मैं केवल सत्य, झूठा, सच प्राप्त कर सकता हूं ... और वास्तविक मूल्य नहीं:लिंक/लैम्ब्डा के बारे में प्रश्न। चयन करें (नया सीखने 3.0)

 int[] numbers = { 5, 4, 1, 3, 9, 8, 6, 7, 2, 0 }; 

     var oddNumbers = numbers.Select(n => n % 2 == 1); 

     Console.WriteLine("Numbers < 5:"); 
     foreach (var x in oddNumbers) 
     { 
      Console.WriteLine(x); 
     } 

मैं पूर्णांक की सूची दिखाने के लिए इसे कैसे ठीक कर सकता हूं?

+0

लगता n% 2 == 1 नंबर <5 के साथ कोई संबंध नहीं है? –

उत्तर

25
अपने एक "कहाँ"

int[] numbers = { 5, 4, 1, 3, 9, 8, 6, 7, 2, 0 }; 

    var oddNumbers = numbers.Where(n => n % 2 == 1); 

    Console.WriteLine("Odd Number:"); 
    foreach (var x in oddNumbers) 
    { 
     Console.WriteLine(x); 
    } 

"चुनें" विधि प्रत्येक तत्व के लिए लैम्ब्डा परिणाम की एक नई सूची पैदा कर रही है (सही/गलत) करने के लिए "चुनें" बदलें

। लैम्ब्डा के आधार पर "कहां" विधि फ़िल्टरिंग कर रही है।

सी # में, आप भी इस वाक्य रचना है, जो आप पा सकते हैं इस्तेमाल कर सकते हैं स्पष्ट:

 var oddNumbers = from n in numbers 
         where n % 2 == 1 
         select n; 

जो संकलक करने के लिए अनुवाद: करने के लिए

var oddNumbers = numbers.Where(n => n % 2 == 1).Select(n => n); 
+0

Thx यह काम करता है, अगर यह डेटा का चयन नहीं करता है तो क्या चयन करें? –

+1

यह डेटा का चयन करता है। यह आपके लैम्ब्डा के परिणाम का चयन कर रहा है - जो एक बुलियन मूल्य है। – TheSoftwareJedi

+0

thx !! अब मैं समझ गया। –

5
numbers.Select(n => n % 2 == 1); 

बदलें इस

numbers.Where(n => n % 2 == 1); 

एक चीज़ को दूसरे में "रूपांतरित" करने का क्या चयन होता है। तो इस मामले में, यह "कनवर्टिंग" एन से "एन% 2 == 1" (जो एक बुलियन है) - इसलिए आपको सभी सच्चे और झूठे मिलते हैं।

आमतौर पर चीजों पर संपत्ति प्राप्त करने के लिए उपयोग किया जाता है। उदाहरण के लिए यदि आप Person वस्तुओं की एक सूची थी, और आप उनके नाम प्राप्त करना चाहता था, है न होता

var listOfNames = listOfPeople.Select(p => p.Name); 

तुम इतनी तरह इस के बारे में सोच सकते हैं:

  • में लोगों की सूची में कनवर्ट करें निम्नलिखित विधि का उपयोग करके तारों की एक सूची: (पी => पी। नाम)

संग्रह के उप-समूह में "चयन करें" ("फ़िल्टरिंग" शब्द की भावना में), आपको कहां उपयोग करना होगा ।

धन्यवाद माइक्रोसॉफ्ट भयानक के नामकरण के लिए

+0

भयानक नामकरण? "चयन करें" चुन रहा है, "कहां" फ़िल्टरिंग है। एसक्यूएल के समान ... – TheSoftwareJedi

+0

हाँ, एसक्यूएल के समान ही है, लेकिन हर दूसरे प्रोग्रामिंग भाषा (रूबी, लिस्प, पायथन, इत्यादि) के लिए अलग है जो 'चयन' के लिए मानचित्र का उपयोग करते हैं और 'कहाँ' –

+0

Thx के बारे में जानकारी के लिए चुनें चयन करें। –