2012-11-20 19 views
13

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

+0

मैंने इसे बेहतर डी के लिए पूछने के लिए संपादित किया। या एल्गोरिदम - एकमात्र उचित जवाब "क्या यह पर्याप्त तेज़ है?" क्या "क्या आपने इसे प्रोफाइल किया है?" – djechlin

+0

सॉर्टिंग के लिए एल्गोरिदम क्या है? वर्णमाला? न्यूमेरिकल? टाइमस्टैम्प द्वारा? मैं खुद को फायरबेस के बारे में घबराहट के सवालों के बारे में सोचता हूं और आम तौर पर वांछित व्यवहार की पहचान करने के बाद उन्हें हल करना बहुत आसान होता है। – Kato

उत्तर

4

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

यदि आप मौजूदा सूची के बीच में आइटम डालना चाहते हैं, तो मौजूदा वस्तुओं की प्राथमिकताओं को संशोधित करना काम करेगा, लेकिन यह बेहद अक्षम होगा। एक बेहतर तरीका केवल उन दो वस्तुओं के बीच प्राथमिकता चुनना है जहां आप मूल्य डालना चाहते हैं और नई वस्तु के लिए प्राथमिकता निर्धारित करते हैं।

उदाहरण के लिए, यदि आपके पास प्राथमिकता "ए" के साथ तत्व 1 था, और प्राथमिकता "बी" के साथ तत्व 2 था, तो आप प्राथमिकता "aa" (या "aq", "az" के साथ दोनों के बीच तत्व 3 डाल सकते हैं, आदि)।

हमारे अनुभव में, जब आप एक आदेशित सूची बनाते हैं, तो आपको उस सूची में स्थिति की आवश्यकता नहीं होती है जिसे आप पहले आइटम को सम्मिलित करना चाहते हैं। उदाहरण के लिए, यदि आप किसी गेम के लिए लीडर बोर्ड बना रहे हैं, तो आप पहले से नहीं जानते कि आप सूची में एक नया स्कोर तीसरे स्थान पर रखना चाहते हैं, बल्कि आप जानते हैं कि आप इसे किसी भी स्थिति स्कोर 10000 पर प्राप्त करना चाहते हैं (जो तीसरा हो सकता है)। इस मामले में, केवल स्कोर को प्राथमिकता निर्धारित करने से यह पूरा हो जाएगा। हमारे लीडर बोर्ड उदाहरण यहां देखें: https://www.firebase.com/tutorial/#example-leaderboard

+3

इतनी जल्दी प्रतिक्रिया देने के लिए धन्यवाद। इस मामले में मैं एक ड्रैग-एंड-ड्रॉप सूची बनाना चाहता हूं, इसलिए ऑर्डरिंग उपयोगकर्ता द्वारा परिभाषित की गई है। मुझे दो वांछित वस्तुओं के बीच प्राथमिकता डालने का विचार पसंद है, लेकिन मैं एक चीज़ पर फंस गया हूं: आप कैसे जानते हैं कि अगला आइटम क्या है जब आप 'child_added' कॉलबैक का उपयोग कर रहे हों? आपको केवल पिछली वस्तु मिलती है, न कि उसके बाद। –

+1

क्या आपको कभी भी मनमानी-आदेश सूची, @RadfordSmith के लिए एक अच्छा समाधान मिला? –

0

रूबी मणि ranked_model इस समस्या का एक दिलचस्प दृष्टिकोण है। यह कई अन्य "सूची के रूप में कार्य करता है" कार्यान्वयन की स्थिति पूर्णांक का उपयोग करता है, लेकिन यह प्रत्येक स्थिति की चाल पर सभी पूर्णांक को फिर से लिखने पर निर्भर नहीं है। इसके बजाए, यह पूर्णांक को व्यापक रूप से अलग करता है, और इसलिए प्रत्येक अपडेट केवल एक या दो पंक्तियों को प्रभावित कर सकता है। यह दृष्टिकोण देखने के लिए कि क्या यह दृष्टिकोण यहां फिट हो सकता है, रीडेमे और कोड को देखकर लायक हो सकता है।

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