2010-09-13 16 views
29

में दूसरा आइटम का चयन मैंLINQ - IEnumerable

string[] pkgratio= "1:2:6".Split(':');

var items = pkgratio.OrderByDescending(x => x); 

मैं बीच मूल्य का चयन करना चाहते हैं और इस के साथ आए हैं की है। क्या यह एक Inumberable में दूसरे मान का चयन करने का एक सही तरीका है?

pkgratio.Skip(1).Take(1).First(); 
+0

मेरे पहले प्रश्न से संबंधित: http://stackoverflow.com/questions/1735146/ways-to-get-the-middle-of-a-list-in-haskell –

+0

'पहले()' का उपयोग करने से आपको तात्पर्य है आश्वस्त हैं कि एक आइटम वास्तव में उस स्थिति पर होगा जहां आप पहुंचने का प्रयास कर रहे हैं। यदि कोई संदेह है, तो आप 'FirstOrDefault() 'का उपयोग करना चाह सकते हैं। –

+3

आपको टेक (1) –

उत्तर

61

क्या आप काम करता है, सबसे सीधा रास्ता (के बाद से सूचकांक पहले तत्व के लिए शून्य पर शुरू होता है इंडेक्स को 1 पर) सरणी के सूचकांक का उपयोग करें और दूसरे मद संदर्भित करने के लिए किया जाएगा जबकि: pkgratio[1]

Console.WriteLine(pkgratio[1]); 

एक और पूरी उदाहरण:

string[] pkgratio = "1:2:6".Split(':'); 

for (int i = 0; i < pkgratio.Length; i++) 
    Console.WriteLine(pkgratio[i]); 
एक IEnumerable<T> क्या आप काम करता है, या आप सीधे का उपयोग कर तत्व मिल सकता है के साथ

ElementAt method:

// same idea, zero index applies here too 
var elem = result.ElementAt(1); 

यहाँ एक IEnumerable<string> के रूप में अपने नमूना है। ध्यान दें कि AsEnumerable() कॉल IEnumerable<string> के विरुद्ध नमूना कार्यों पर जोर देना है। से string[] सरणी परिणाम के विरुद्ध आप वास्तव में ElementAt का उपयोग कर सकते हैं, लेकिन पहले दिखाए गए इंडेक्सर का उपयोग करना अधिक कुशल है।

var pkgratio = "1:2:6".Split(':').AsEnumerable(); 
Console.WriteLine(pkgratio.ElementAt(1)); 
+0

की आवश्यकता नहीं है, अब वर्षों से लिंक के साथ काम किया है, और कभी भी ElementAt() का उपयोग नहीं किया है। कुछ परीक्षणों को व्यस्त लिखना और इसकी आवश्यकता है। ग्रेट सरल उत्तर –

+2

ElementAt के लिए +1 यहाँ, अब ElementAtOrDefault का उपयोग कर भी – jolySoft

15

अपने परिदृश्य के लिए pkgratio.ElementAt(1);

हालांकि, अपने विधि लागू है अगर आप कुछ डेटा है कि IQueryable कार्यान्वित उपयोग कर रहे थे या आप एक विशिष्ट सूचकांक जैसे पर शुरू मदों की एक श्रृंखला लेने के लिए की जरूरत:

pkgratio.Skip(5).Take(10);

21

मुझे नहीं लगता कि आपको .Take(1) की आवश्यकता है।

pkgratio.Skip(1).First() 
5

लेकिन इस मामले आप एक सरणी है, तो आप बहुत खुशी का उपयोग कर दूसरे मद प्राप्त कर सकते हैं में:

pkgratio[1] 
9

खैर, Take(1) सख्ती से आवश्यक नहीं है आप के लिए जा रहे हैं बस यह First(), तो मैं

pkgratio.Skip(1).First(); 

हालांकि साथ जाना हो सकता है, कि First() एक अपवाद फेंक होगा अगर कोई मूल्य है, तो आपकरके देख सकते हैंऔर फिर शून्य के लिए जाँच करें।