मुझे ऑर्डरIEnumerable
(या IEnumerable<T>
में कोई फर्क नहीं पड़ता) के बारे में कोई प्रश्न है। , कि एक पर एक अनुसार क्रमबद्ध संग्रह संचालित करने के लिए की जरूरत हैआईनेमरेबल और ऑर्डर
while (enumerable.HasNext())
{
object obj = enumerable.Current;
...
}
अब, मान लें:
हम जानते हैं, IEnumerable के माध्यम से पुनरावृत्ति छद्म कोड निम्नलिखित तरीके से लिखा जा सकता है। क्या इस मामले में IENumerable का उपयोग किया जा सकता है या क्या इंडेक्सेशन समर्थन के साथ अन्य साधनों (यानी IList
) का प्रयास करना बेहतर है?
दूसरे शब्दों में: IEnumerable
का अनुबंध सामान्य रूप से आदेश के बारे में कोई गारंटी देता है?
यूपीडी: तो, IEnumerable
ऑर्डर करने की गारंटी देने वाले सामान्य इंटरफ़ेस के लिए उचित माध्यम नहीं है। नया सवाल यह है कि इंटरफ़ेस या कक्षा ऑर्डर के साथ एक अपरिवर्तनीय संग्रह के लिए उपयोग किया जाना चाहिए? ReadonlyCollection
? IList
? उनमें से दोनों में Add()
विधि है (यहां तक कि पूर्व में भी लागू नहीं किया गया है।) कोई सुझाव?
पीएस मेरे अपने विचार: IEnumerable
आदेश के बारे में कोई गारंटी नहीं प्रदान करता है। सही कार्यान्वयन अलग-अलग समीकरणों में अलग-अलग क्रम में समान तत्वों को वापस कर सकता है (एक SQL क्वेरी पर विचार करें)
पी.पी.एस. मुझे LINQ First()
से अवगत है, लेकिन यदि IEnumerable
इसके आदेश के बारे में कोई शब्द नहीं कहता है, तो यह एक्सटेंशन बहुत बेकार है।
एक और उदाहरण 'शब्दकोश <,>' है। यह स्पष्ट रूप से दस्तावेज किया गया है कि जिस क्रम में उसकी प्रविष्टियों की गणना की गई है वह अनिर्धारित है। तो कोड 'dict.Last()। कुंजी' (जहां 'dict'' शब्द <,> 'और' अंतिम() 'LINQ एक्सटेंशन विधि है) कोई कोड नहीं है। (मैंने एक डेवलपर को ठीक से ऐसा करने के बारे में सुना है।) –
मैं पहले से ही कहूंगा कि यह समझना महत्वपूर्ण है कि कुछ सामान्य संग्रह के लिए आदेश के बारे में क्या गारंटी है। तो ऑर्डर गारंटी किसी विशेष क्रम के बारे में नहीं है (कहें, सॉर्टिंग के परिणामस्वरूप), लेकिन गारंटी के बारे में कि उसी संग्रह के तत्वों का क्रम बाद की गणनाओं के लिए समान है। अधिकांश संग्रह स्पष्ट रूप से इसकी गारंटी नहीं देते हैं। IList केवल एक प्रकार का शब्दकोश प्रस्तुत करता है जहां कुंजी इंडेक्स हैं। –
IOrderedEumerable यह मानने के लिए एक संकेत हो सकता है कि संग्रह ऑर्डर की गारंटी देता है (हालांकि इंटरफ़ेस अभी भी नहीं करता है), लेकिन इसकी आवश्यकता से अधिक है - यह आमतौर पर एक विशेष सॉर्ट ऑर्डर का प्रतिनिधित्व करता है, जबकि हमें किसी भी (यादृच्छिक) ऑर्डर की आवश्यकता होती है जो कि बस है गणना के बीच गारंटी। निष्कर्ष निकालने के लिए, केवल ठोस कार्यान्वयन वास्तव में आदेश की गारंटी दे सकता है (उदा। ऐरे, सूची)। –