सी # जेनेरिक हैशसेट < टी> खोज प्रदर्शन ओ (1) होना चाहिए, और एक ऑब्जर्वेबल कोलेक्शन < टी का खोज प्रदर्शन ओ (एन) होना चाहिए।सी # हैशसेट <T> खोज प्रदर्शन (एक पर्यवेक्षण चयन <T> की तुलना में)?
मेरे पास बड़ी संख्या में अद्वितीय तत्व हैं, प्रत्येक तत्व में डेटटाइम संपत्ति है जो अद्वितीय नहीं है।
प्रत्येक तत्व अपने डेटटाइम को वापस लौटकर अपने हैशकोड की गणना करता है। गेटहाशकोड()।
अब मैं अपने डेटा का सबसेट प्राप्त करना चाहता हूं, उदा। सभी तत्वों को एक तिथि जो मार्च 2012 से जून 2012 के
var result = from p in this.Elements
where p.Date >= new DateTime(2012, 03, 01) &&
p.Date <= new DateTime(2012, 30, 06
select p;
बीच है, तो मैं 300.000 तत्वों का एक संग्रह पर इस LINQ क्वेरी चलाने है, यह ~ लेता है 25 एमएस 80 तत्वों को देखते हुए सीमा के भीतर हैं वापस जाने के लिए - इससे कोई फर्क नहीं पड़ता कि मैं हैशसेट < टी> या एक पर्यवेक्षण चयन < टी> का उपयोग करता हूं।
यदि मैं मैन्युअल रूप से सभी तत्वों के माध्यम से लूप करता हूं और उन्हें जांचता हूं, तो यह एक ही समय लगता है, ~ 25 एमएस।
लेकिन मुझे दी गई सीमा के भीतर सभी तिथियों के हैशकोड पता है। क्या मेरे हैशसेट < टी> से दिए गए हैशकोड के साथ सभी तत्व प्राप्त करना संभव है? मुझे लगता है कि यह बहुत तेज होगा ...
क्या LINQ क्वेरी को तेज़ करना संभव है? मुझे लगता है कि यह मेरे हैशसेट < टी> की विशेष क्षमताओं का उपयोग नहीं करता है?
क्या प्रत्येक तत्व का हैशकोड इसकी तारीख है? – Jodrell
हैशसेट की कोई विशेष क्षमता नहीं है जो उन तत्वों के कुशल पुनर्प्राप्ति की अनुमति देगी जिनकी तिथि किसी सीमा के भीतर होती है। एक हैशसेट सेट में एक विशेष वस्तु या मान (या नहीं है) के त्वरित निर्धारण की अनुमति देता है। –
hatchet
मेरा पहला अवलोकन यह है कि यदि ऑब्जेक्ट भिन्न होते हैं तो हैश कोड अलग-अलग हो सकते हैं (यह स्पष्ट रूप से हमेशा मामला नहीं हो सकता है, लेकिन यह है कि आप किस चीज के लिए लक्ष्य रखते हैं)। आपके मामले में यह मामला नहीं है। आपके पास समान हैशकोड वाले विभिन्न तत्व हैं जो खराब हैं। सबसे खराब स्थिति अगर आप केवल था तीन अलग-अलग अद्वितीय दिनांकों फिर अपने HashSet केवल तीन बाल्टी और इसलिए HashSet में ऐसा कुछ ढूंढने प्रमुख यह हे (एन) होने के लिए है कि बाल्टी में सभी तत्वों के माध्यम से सुलझाने के लिए ही होगी में (दे या ले)। इसके अलावा, मैं नोट करना चाहिए कि यह एक सामान्य टिप्पणी है, सीधे :) – Chris