2011-12-24 18 views
7

मेरे पास लगभग 10,000 रिकॉर्ड हैं। प्रत्येक रिकॉर्ड में 2 फ़ील्ड होते हैं: एक फ़ील्ड लंबाई में 300 अक्षरों तक एक स्ट्रिंग है और दूसरा फ़ील्ड दशमलव मान है। यह उत्पाद नामों और प्रत्येक उत्पाद की कीमत के साथ एक उत्पाद सूची की तरह है।मुझे किस प्रकार का संग्रह उपयोग करना चाहिए?

मैं क्या करने की जरूरत उपयोगकर्ता किसी भी शब्द लिखें और एक लिस्टबॉक्स में उनकी कीमतों के साथ एक साथ कि शब्द वाले सभी उत्पादों को प्रदर्शित करने की अनुमति है। बस इतना ही।

  1. इस परिदृश्य के लिए किस प्रकार का संग्रह सर्वोत्तम है?
  2. यदि मुझे उत्पाद के नाम या मूल्य के आधार पर सॉर्ट करने की आवश्यकता है, तो क्या विकल्प अभी भी वही होगा?

अभी मैं एक XML फ़ाइल का उपयोग कर रहा है, लेकिन मैं एक संग्रह का उपयोग कर तो यह है कि मैं सभी मूल्यों एम्बेड कर सकते हैं में कोड सरल है सोचा। आपके सुझावों के लिए धन्यवाद।

+0

कृपया शीर्षक में सी # डालें। टैग के लिए यही है। – Amy

+0

संग्रह नहीं: आप डेटा स्टोर करने और इसे एक्सेस करने के लिए SQLLite का उपयोग कर सकते हैं। –

उत्तर

10

एक शब्दकोश नौकरी करेगा। हालांकि, यदि आप तेजी से आंशिक मिलान कर रहे हैं (उदा। उपयोगकर्ता प्रकार के रूप में खोजें) तो आप एक ही आइटम को इंगित करने वाली एकाधिक कुंजी बनाकर बेहतर प्रदर्शन प्राप्त कर सकते हैं। उदाहरण के लिए, "ऐप्पल" शब्द "एपी", "ऐप", "एप्पल" और "ऐप्पल" के साथ स्थित हो सकता है।

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

यदि आप सामान्य गलत वर्तनी को पुनर्निर्देशित करने या संबंधित वस्तुओं को इंगित करने के लिए वांछित हैं तो आप अपनी खुद की चाबियां भी बना सकते हैं। यह अद्वितीय कुंजी के साथ अधिकांश मुद्दों को भी समाप्त करता है क्योंकि प्रत्येक कुंजी सूची में इंगित करता है। एक ही आइटम को प्रत्येक नाम से उसके नाम पर वर्गीकृत किया जा सकता है; यह बेहद उपयोगी है यदि आपके पास लंबे शब्द वाले नाम हैं जिनमें एकाधिक शब्द हैं। अपने आइटम वर्गीकृत करते समय, नाम में प्रत्येक शब्द को एक या अधिक कुंजी में मैप किया जा सकता है।

मैं यह भी कहना चाहिए कि निर्माण और 10K आइटम को वर्गीकृत ज़्यादा समय नहीं लगेगा अगर सही ढंग से किया (कुछ सौ मिलीसेकेंड उचित है)। जब तक आप Application, Cache, या स्थिर सदस्यों का उपयोग करना चाहते हैं, तब तक परिणामों को कैश किया जा सकता है।

संक्षेप में, परिणामी संरचना Dictionary<string, List<T>> है जहां स्ट्रिंग एक छोटा है (2-6 वर्ण अच्छी तरह से काम करता है) लेकिन अद्वितीय कुंजी। प्रत्येक कुंजी को List<T> (या अन्य संग्रह, यदि आप इतने इच्छुक हैं) के लिए इंगित करते हैं जो उस कुंजी से मेल खाते हैं। जब कोई खोज निष्पादित की जाती है, तो आप उस कुंजी का पता लगाते हैं जो उपयोगकर्ता द्वारा प्रदान किए गए शब्द से मेल खाता है। अपनी चाबियों की लंबाई के आधार पर, आप उपयोगकर्ता की खोज को अपनी अधिकतम कुंजी लंबाई में छोटा कर सकते हैं। सही बाल संग्रह का पता लगाने के बाद, फिर आप जो भी कार्यप्रणाली चाहते हैं उसका उपयोग करके उस संग्रह को पूर्ण या आंशिक मिलान के लिए खोजें।

अंत में, आप सूची में प्रत्येक आइटम के लिए एक हल्के संरचना बनाने के लिए इतना है कि आप आइटम के बारे में अतिरिक्त जानकारी के स्टोर कर सकते हैं कर सकते हैं। उदाहरण के लिए, आप एक छोटी उत्पाद कक्षा बना सकते हैं जो उत्पाद की नाम, मूल्य, विभाग और लोकप्रियता को संग्रहीत करती है। यह आपको उपयोगकर्ता को दिखाए गए परिणामों को परिशोधित करने में आपकी सहायता कर सकता है।

सभी में, आप वास्तविक समय में बुद्धिमान, विस्तृत, अस्पष्ट खोज कर सकते हैं।

उपर्युक्त संरचनाओं को लगभग trie के बराबर कार्यक्षमता प्रदान करना चाहिए।

+1

+1, आंशिक मिलान करने के लिए एक दृष्टिकोण दिखा रहा है और एक उपयोगी उत्तर लिखने के लिए समय ले रहा है – Adam

9

10K रिकॉर्ड इतना नहीं है।

एक Dictionary<string,decimal> बिल को फिट होगा। आप LINQ का उपयोग करके कुंजी या मूल्य से सॉर्ट कर सकते हैं, साथ ही साथ खोज भी कर सकते हैं।

यह मानता है कि उत्पाद के नाम अद्वितीय हैं।

+0

मैं सहमत हूं, लेकिन मुझे लगता है कि यह भी ध्यान देने योग्य है कि यह केवल तभी काम करेगा जब सभी तार अद्वितीय हों। – madd0

+0

@ madd0 - उचित बिंदु। उत्तर अपडेट किया गया। – Oded

+0

+1 और कोई सीमा जब हमें शब्दकोश का उपयोग करना बंद करना चाहिए या जब यह प्रभावी होने में बहुत धीमा हो जाएगा? उत्पाद श्रेणी का सुझाव देने के लिए –

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