18

priority queues in .Net and C# को कार्यान्वित करने से निपटने वाले स्टैक ओवरफ़्लो पर कुछ धागे हैं।नेट फ्रेमवर्क की प्राथमिकता कतार कक्षा क्यों नहीं है?

मेरा मुद्दा अधिक बुनियादी प्रकृति का है: नेट फ्रेमवर्क में बॉक्स से प्राथमिकता कतार क्यों नहीं है? यहां तक ​​कि सी ++ मानक पुस्तकालय में भी एक है।

+1

जावा से सी # में जाने पर पहली बार देखी गई चीज़ों में से एक। कोई प्राथमिकता कतार नहीं है? जावा ने भी प्राथमिकता कतारों को सिंक्रनाइज़ किया था/था। – Carra

+0

यह भी देखें http://stackoverflow.com/questions/102398/priority-queue-in-net –

उत्तर

12

कुछ समय पहले एक प्रश्न था (why C# does allow non-member functions like C++) जिसने एरिक लिपर्ट को blog post लिखने के कारणों के बारे में बताया। इसमें, वह बताते हैं:

मुझसे पूछा गया है "क्यों सी # लागू सुविधा एक्स नहीं है?" पुरे समय। उत्तर हमेशा एक जैसा होता है: क्योंकि किसी ने कभी भी उस सुविधा को डिज़ाइन, निर्दिष्ट, कार्यान्वित, परीक्षण, दस्तावेज और शिप नहीं किया है। एक सुविधा बनाने के लिए उन सभी छः चीजें जरूरी हैं। उनमें से सभी समय, प्रयास और धन की भारी मात्रा में खर्च करते हैं। विशेषताएं सस्ता नहीं हैं, और हम यह सुनिश्चित करने के लिए बहुत मेहनत करते हैं कि हम केवल उन्हीं सुविधाओं को शिपिंग कर रहे हैं जो हमारे उपयोगकर्ताओं को हमारे सीमित समय, प्रयास और धन बजट के लिए सर्वोत्तम संभव लाभ प्रदान करते हैं।

मैं संदिग्ध कि शायद यही कारण है कि नेट एक प्राथमिकता कतार के साथ व्यापार नहीं करता है का जवाब है - (?) पर्याप्त नहीं समय, प्रयास, पैसा, मांग एक को लागू करने गया था।

+2

धन्यवाद, एड्रियन, मैंने लिखा है कि ब्लॉग पोस्ट ने इसे लिखा था। मैं गैर-एमएस लोगों की राय सुनने में भी रूचि रखता हूं - क्या डेटा संरचना वास्तव में ढांचे में आवश्यक नहीं है? क्या यह अन्य सभी देवताओं के लिए खुद को लागू करने के लिए छोड़ने के लिए पर्याप्त छोटा है? आदि। मैं अपना दृष्टिकोण जानता हूं, लेकिन मैं दूसरे के इनपुट के आधार पर समायोजित कर सकता हूं। :-) –

+3

समय प्राथमिकताओं का सवाल है। अगर वे कहते हैं कि पर्याप्त समय नहीं था, तो प्रश्न बन जाता है: "क्यों * नहीं * प्राथमिकता कतार शामिल है, लेकिन * क्या * xxx शामिल है?" और xxx प्राथमिकता कतार की तुलना में कुछ कम उपयोग किया जा सकता है। मुझे पता है, शायद xxx = HybridDictionary ले लो। मुझे यकीन है कि उन्हें कुछ ऐसा मिला है जो प्राथमिकता कतार के लिए समय निकालने के लिए छोड़ा जा सकता था। –

+0

हां, यह वही है जो मेरा मतलब था, लेकिन आपने इसे बेहतर बना दिया ... ;-) –

4

.NET 4.0, एक SortedSet<T> वर्ग का परिचय ISet<T> इंटरफ़ेस जो SortedSet<T> और HashSet<T> द्वारा कार्यान्वित किया जाता के साथ। यह स्पष्ट रूप से आपके PriorityQueue<T> कक्षा को लागू करने के लिए आसान बना देगा।

हालांकि, अभी भी IQueue<T> इंटरफ़ेस नहीं है, जो कम से कम प्राथमिक बीसीएल Queue<T> की तुलना में प्राथमिकता कतारों या किसी अन्य कार्यान्वयन की आवश्यकता को स्वीकार करेगा। इसी प्रकार, IStack<T> नहीं है।

व्यक्तिगत रूप से मुझे इनमें से कुछ सबसे बुनियादी इंटरफेस निराशाजनक और लघु-दृष्टि वाले लोगों की कमी दिखाई देती है, विशेष रूप से मौजूदा वर्ग से एक साधारण इंटरफ़ेस निकालने के लिए डिज़ाइन/विनिर्देश/कार्यान्वयन/परीक्षण/दस्तावेज़ीकरण लागत वास्तव में बहुत कम होनी चाहिए।

public interface IQueue<T> : IEnumerable<T>, ICollection, IEnumerable 
{ 
    T Dequeue(); 
    void Enqueue(T item); 
    T Peek(); 
} 

वहां, देखें? मेंने यह किया है।

+1

आपने इंटरफेस को कोड किया है, लेकिन कक्षा के बारे में क्या? नेट में कई इंटरफेस नहीं हैं जो कम से कम एक कार्यान्वयन के साथ नहीं आते हैं। – cjk

+6

क्या यह इंटरफ़ेस गैर-संख्यात्मक कतारों, जैसे एसिंक्रोनस संचार कतारों द्वारा प्रयोग योग्य होगा? कतार अंतराल के बारे में क्या, क्या उनके पास अपने स्वयं के इंटरफेस होना चाहिए, ताकि आप कोड के एक हिस्से में केवल पुश-क्षमता दे सकें, और दूसरे को खींचने की क्षमता दे सकें? समस्या कोड की उन 5 पंक्तियों को नहीं लिख रही है, समस्या इसे डिजाइन कर रही है ताकि कोई भी शिकायत न करे, और यह प्रक्रिया में .NET रनटाइम के लिए मूल्य उत्पन्न करता है। –

+2

सीके: सिस्टम देखें। चयन। जेनेरिक। क्यूयू लास: असीमित/समवर्ती संग्रहों में समान व्यवहार अनुबंध नहीं है, इसलिए उन्हें इंटरफ़ेस को लागू करने की आवश्यकता नहीं होगी। मेरा मुद्दा यह है कि बीसीएल टीम का रवैया ऐसा लगता है कि यदि वे केवल एक निर्माण के कार्यान्वयन प्रदान करते हैं, तो इंटरफ़ेस की कोई आवश्यकता नहीं है, जो सही दृष्टिकोण नहीं है। IMHO। –

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

  • कोई संबंधित समस्या नहीं^_^