2010-11-06 12 views
13

मैं 1 9 30 से 2010 तक पूर्णांक के सी # List बनाना चाहता हूं। मेरे सिर के ऊपर से, एकमात्र तरीका मैं ऐसा करने के बारे में सोच सकता हूं for या while संख्याओं के बीच प्रत्येक पूर्णांक के माध्यम से लूप को लूप करें और उन्हें List पर अलग-अलग जोड़ें।सी #: पूर्णांक के रूप में वर्षों की सूची बनाएं

मुझे पता है सी # सूचियों में बहुत सारी रोचक विधियां हैं, खासकर जब आप लिंक का उपयोग कर रहे हैं। क्या कोई ऐसा करने का एक और अधिक प्रभावी तरीका सोच सकता है?

+0

क्या आप कुछ और बता सकते हैं, आप इन वर्षों क्यों बना रहे हैं? इसलिए हम बेहतर सुझाव दे सकते हैं। –

+0

लूप के लिए थोड़ी देर का उपयोग करना कुशल होगा। नतीजे का पुन: उपयोग करने के बजाय इसे कैसे बनाया जाता है, इसकी बजाय दक्षता बिंदु-दृश्य से अधिक महत्वपूर्ण होने की संभावना है। –

+0

@ चतुरता, मैं एचटीएमएल में एक ड्रॉप-डाउन चयन सूची में उपयोग करने के लिए मूल्यों का निर्माण कर रहा हूं, इसलिए शायद चिंता करने की आवश्यकता नहीं है कि सूची का उपयोग कैसे किया जाएगा। –

उत्तर

33

Enumerable.Range(1930, 81) (MSDN docs) आपको जो भी चाहिए वो एक समेकित मिलेगा। पहला पैरामीटर प्रारंभिक मान है और दूसरा आइटम की संख्या है। आपको 80 के बजाय 81 की आवश्यकता है क्योंकि आप 1 9 30 से 2010 तक समावेशी चाहते हैं।

यदि आप स्पष्ट रूप से इसे List के रूप में चाहते हैं, तो Enumerable.Range(1930, 81).ToList() का उपयोग करें।

यह विधि शायद दक्षता के मामले में कोई अलग नहीं है, लेकिन यह अधिक संक्षिप्त कोड है।

+1

+1। यह बेहतर दस्तावेज़ इरादा है, अनिवार्य से अधिक घोषणात्मक है, और स्क्रू-अप से कम प्रवण है, जैसे गलती से लूप चर को संशोधित करना। एक तरफ: मेरी इच्छा है कि एक रेंज की तरह एक समारोह था जो निचले बाउंड और गिनती के बजाए निचले और ऊपरी बाउंड को ले गया। सुनिश्चित नहीं है कि आप इसे क्या कहते हैं, या समावेशी/अनन्य नामकरण/उपयोग समस्या से निपटने के लिए कैसे करें :) –

+0

@Merlyn: हाँ, मैं सहमत हूं। एफ # के [1 9 30..2010] वाक्यविन्यास के समान कुछ अच्छा होगा। – adrianbanks

7

उपयोग Enumerable.Range()

var MyList = Enumerable.Range(1930, 2010-1930+1).ToList(); 
+1

क्या मैं सिर्फ 'नई सूची (संख्यात्मक। श्रेणी (1 9 30, 2010-1930 + 1)) नहीं कर सका और लूप से बचें? –

+0

@ मेगा मैट: हाँ। मुझे अभी एहसास हुआ कि मेरा दिमाग अलग हो गया। –

+0

@ मेगा: क्या लूप? उसके कोड में कोई भी लूप आपके कोड में भी मौजूद होगा (एक सूची में गणना करने योग्य)। –

3

अन्य दो जवाब का उपयोग कर Enumberable.Range() त्वरित/आसान यह करने के लिए तरीका है सही हैं,, लेकिन मैं टुकड़े पर जोड़ना होगा। DateTime.Now.Year का उपयोग करें ताकि आपको हर साल कोड को ठीक करने की आवश्यकता न हो। दो महीनों में, दूसरे पैरामीटर के लिए हार्ड-कोडेड मान का उपयोग करके यह पुराना हो गया होगा।

List<int> listYears = Enumerable.Range(1930, DateTime.Now.Year - 1930 + 1).ToList(); 
1

तो, जबकि इस (अच्छा जवाब के साथ) उत्तर दिया गया है, क्यों नहीं एक तरीकों बनाने के जो 'पैदावार' (a generator method) - Enumerable.Range सिर्फ इस तरह के एक विधि मानक है:

IEnumerable<int> InclusiveRange(int s, int e) { 
    for (int i = s; i <= e; i++) { 
    yield return i; 
    } 
} 

var r = InclusiveRange(1930, 2010).ToList(); 

हैप्पी कोडिंग।

+0

मैं इसे ** जेबी के साथ जोड़ता हूं। ** उत्तर: 'var r = समावेशी रेंज (1 9 30, डेटटाइम.अब। प्रिय - 1 9 30 + 1)। टॉलिस्ट();' :) – Noctis

+0

@ नोक्टिस को शुरू करने की आवश्यकता नहीं है साल; बस 'var r = समावेशी रेंज (1 9 30, डेटटाइम.अब। प्रिय) .सूची(); ' – Stajs

संबंधित मुद्दे