2010-03-29 14 views

उत्तर

8

मुझे लगता है कि आप एक एक्सेसर की तलाश में हैं जो संग्रह पर आंशिक-प्रकार का प्रदर्शन करके एक अनियमित संग्रह का एनएच तत्व देता है। यह तब उपयोगी होता है जब आपके पास बहुत बड़ा संग्रह होता है और कुछ ऑर्डरिंग अनुमान के आधार पर पहले तत्वों में से एक में रुचि रखते हैं।

मेरे ज्ञान के लिए, न तो .NET BCL या LINQ एक्सटेंशन समकक्ष प्रदान करते हैं। सभी सॉर्टिंग विधियों (Enumerable.OrderBy सहित) संग्रह का पूर्ण क्रम निष्पादन करते हैं।

यदि आपको एनएच के एक कुशल संस्करण की आवश्यकता है, तो आपको ऐसा करने के लिए आईनेमेरेबल पर अपनी खुद की विस्तार विधि रोल करने की आवश्यकता होगी। यदि आप अपना खुद का रोल करने जा रहे हैं तो आप Quick Select algorithm में देखना चाहेंगे, जिसमें ओ (एन) प्रदर्शन है।

जानवर बल संस्करण के लिए पर्याप्त है, तो आप LINQ इस्तेमाल कर सकते हैं:

var someCollection = new []{ 5, 2, 8, 9, 0, 1, 3, 12, 4 }; 

var fifthItem = someCollection.NthItem(5); 

public static class NthExtensions 
{ 
    public static T NthItem(this IEnumerable<T> coll, int n) 
    { 
     return coll.OrderBy(x => x).Skip(n - 1).First(); 
    } 
} 
3

नहीं, ऐसा नहीं है। आपको हाथ से चयन एल्गोरिदम (अधिमानतः quick select) लिखना होगा।

1

वहाँ एक प्रत्यक्ष समकक्ष नहीं है। आप संभावित रूप से LINQ के ऑर्डरबी का उपयोग कर सकते हैं और किसी भी आईनेमरेबल पर समान लक्ष्यों को प्राप्त करने के लिए ले/छोड़ सकते हैं, लेकिन पूरे संग्रह को इस प्रक्रिया में हल किया जाएगा।

+0

मैं सोच रहा हूं कि, 'ऑर्डरबी' को कार्यात्मक रूप से कार्यान्वित किया गया है (उदाहरण के लिए मर्ज सॉर्ट करके), 'टेक/स्किप' प्लस * आलसी मूल्यांकन * का संयोजन वास्तव में केवल ** आंशिक ** प्रकार नहीं करेगा के रूप में अनुरोध किया। 'हेस्केल में' हेड (सॉर्ट लिस्ट)) '- उदाहरण के लिए - सूची की न्यूनतम खोज के लिए एक मान्य ओ (एन) दृष्टिकोण है। कोई संकेत? – Dario

+0

@ डारियो: सैद्धांतिक रूप से, यह ~ ~ ~ हो सकता है, लेकिन वर्तमान कार्यान्वयन नहीं करता है। –

+0

हालांकि मजाकिया होगा :) – Dario

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