2013-07-15 10 views
16
//create the new object for cars 
    Cars s1 = new Cars("Toyota", 2005, 500000, "White", "good");//Car1 Ob 
    Cars s2 = new Cars("Honda", 2004, 550000, "Black", "fine");//Car2 Ob 
    Cars s3 = new Cars("Nissen", 2012, 490000, "Yellow", "best");//Car3 Ob 
    Cars s4 = new Cars("Suzuki", 2012, 390000, "Blue", "fine");//Car4 Ob 
    Cars s5 = new Cars("BMW", 2012, 1000000, "Green", "Good");//Car5 Ob 

    //Create list to add objects into the memory 
    List<Cars> list1 = new List<Cars>(); 
    list1.Add(s1);list1.Add(s2);list1.Add(s3);list1.Add(s4);list1.Add(s5); 



//cars info which has the lowest price 
     double lowest_price = 0; 
     foreach(Cars a in list1){ 
     if(a.price <= lowest_price){ 
      lowest_price = a.price; 
      Console.WriteLine(a.price); 
      } 
     }//end of loop 

यह वह कोड है जिसे मैं कार की जानकारी प्रिंट करने की कोशिश कर रहा हूं जिसमें सबसे कम कीमत है। लेकिन कुछ भी प्रिंट नहीं हो जाता है।सूची से निम्नतम मूल्य कैसे प्राप्त करें?

+3

'एक में से कोई भी .price' 0 से कम है। 'a.price <= lowest_price' हमेशा झूठा है। –

+0

इसके अलावा आप 'a.price' प्रिंट कर रहे हैं - क्या आप' lowest_price' प्रिंट नहीं करना चाहते थे? – Bridge

+0

ओह .. ठीक है !! यह हमेशा झूठा है !! धन्यवाद!! – user2042721

उत्तर

32

LINQ Min विस्तार विधि का उपयोग करें:

double lowest_price = list1.Min(car => car.price); 

इसके अलावा, आप निर्दिष्ट नहीं किया है, लेकिन अगर आप एक InvalidOperationException का संकेत "अनुक्रम कोई तत्व शामिल हैं" के साथ अपने सेट में कोई कारों यह असफल हो जायेगी। यदि यह संभव है आप कोई कार है, एक त्वरित अद्यतन हो सकता है: क्योंकि अपने प्रारंभिक मूल्य 0 है

double lowest_price = list1.Any() ? list1.Min(car => car.price) : 0; 

क्यों अपने वर्तमान कोड प्रिंट कुछ भी नहीं करने के लिए के रूप में यह है। कोई कार का मूल्य नहीं है नकारात्मक (या 0 से कम)। आप अपने मौजूदा पाश का उपयोग जारी रखना चाहते हैं, उच्चतम संभव मूल्य के लिए प्रारंभिक मूल्य बदलने के लिए:

double lowest_price = Double.MaxValue; 
foreach(Cars a in list1){ 
    if(a.price <= lowest_price){ 
     lowest_price = a.price; 
     Console.WriteLine(a.price); 
    } 
}//end of loop 

नोट इस अतिरिक्त पक्ष प्रभाव पड़ता है कि कारों की अपनी list1खाली, तो lowest_price मूल्य है अगर Double.MaxValue होगा। यह आपके मौजूदा कोड के साथ आपके लिए चिंता का विषय हो सकता है या नहीं।

double lowest_price; 
if (list1.Any()){ 
    lowest_price = Double.MaxValue; 
    foreach(Cars a in list1){ 
     if(a.price <= lowest_price){ 
      lowest_price = a.price; 
      Console.WriteLine(a.price); 
     } 
    }//end of loop 
} 
else{ 
    lowest_price = 0; 
} 
+0

धन्यवाद! क्या लूप विधि के साथ इसे करने के लिए वैसे भी है? – user2042721

+0

@ user2042721: हाँ, मेरा संपादन देखें। –

+0

धन्यवाद !! मैं तुरंत कोशिश करूँगा! यह वह सटीक चाल है जिसे मैंने आज सीखा !! एक बार फिर धन्यवाद! – user2042721

6

आप सूची में मिन विस्तार का प्रयोग करेंगे:

यदि यह एक चिंता का विषय है, और जरूरत 0 वापस जाने के लिए अगर कोई कारें हैं, आप एक मामूली समायोजन कर सकते हैं।

lowest_price = list1.Min(c => c.price); 
3

सिर्फ अपने कोड के साथ समस्या के आधार पर: यदि आप 0 की तुलना में कम कीमत के लिए नहीं जा रहे हैं ... तो आप के लिए इसे बदल की जरूरत है:

double lowest_price = list1[0].price; 
     foreach(Cars a in list1){ 
     if(a.price <= lowest_price){ 
      lowest_price = a.price; 
      Console.WriteLine(a.price); 
      } 
     }//end of loop 

संपादित: यह केवल तभी काम करेगा यदि list1 मौजूद है और खाली नहीं है, सामान्य उपयोग के लिए आपको if (list1 is null || list1.Count==0) पहली पंक्ति की जांच करनी होगी।

+0

आप शायद यह देखना चाहते हैं कि सूची पहले खाली नहीं है, या यह श्रेणी अपवाद से बाहर फेंक सकता है – Charleh

+0

@ चार्लेह: बिल्कुल, यह ओपी के उदाहरण के आधार पर केवल एक फिक्स है (जब सभी आइटम पहले जोड़े गए थे कोड में दिखा रहा है), अद्यतन किया गया। – Bolu

0

अन्य प्रतिक्रियाएं सही ढंग से LINQ समाधान प्रदान करती हैं, लेकिन आपके विशिष्ट कोड के साथ समस्या यह है कि आप जांच रहे हैं कि कार की कीमत (ए.प्रिस) < = आपके सबसे कम_प्रसार चर है। आपका सबसे कम_प्रिसा चर 0 के मान के साथ तत्काल है और सूचीबद्ध आपकी डिफ़ॉल्ट कार की कीमतों के मुताबिक जो 0 से अधिक हैं, कभी मान्य नहीं होंगे। तो आपका सबसे कम_प्रिसा चर कभी अपडेट नहीं किया जाएगा और इसलिए कंसोल के लिए इसका मूल्य कभी नहीं लिखें। यही कारण है कि "कुछ भी प्रिंट नहीं करता" का आपका अनुरोध हो रहा है। यह आपकी जांच में और आपके तर्क में एक त्रुटि है। उस रेखा को "अगर (सबसे कम_प्रिसा < = a.price)" के करीब आने के लिए अपडेट करें।

2

आप (बजाय Linq का उपयोग करने का - जो दृष्टिकोण की सिफारिश की है) काम करने के लिए अपने कोड को ठीक करना चाहते हैं, इस लाइन बदलने के लिए:

double lowest_price = 0; 
इस के लिए

:

double lowest_price = double.MaxValue; 
संबंधित मुद्दे