ruby on rails - Efficiently working with arrays and hashes? -
मेरे पास ये सरणियाँ हैं:
@users = [[1, 'मार्क'] , [2, 'बिल'], [3, 'जॉन']] @ प्रोजेक्ट्स = [[1, 'बदलें द वर्ल्ड'], [2, 'बिल्ड एक कंप्यूटर'], [3, 'एक वृत्त में भागो' ]] @ प्वाइंट_ड्यू = [[1,1, "40"], [1,3, "80"], [2,1, "20"] मेरे पास एक कुछ समाधान लेकिन मैं इन सभी वस्तुओं को पुनरावृत्त करने के सबसे अधिक प्रदर्शन कुशल तरीके की तलाश कर रहा हूं जैसे कि मुझे ActiveRecord के माध्यम से परिणाम दिए गए थे
मैं एक प्रोजेक्ट के साथ एक & lt; उल & gt; और एक & lt; LI & gt; उपयोगकर्ता के नाम और उसके कारण अंक प्रदर्शित करना चाहता हूं विशेष प्रयोक्ता मैं कुछ समाधानों से इंजेक्ट और नक्शा का उपयोग करते हुए हैशों में परिवर्तित करने के साथ आया था, हालांकि, मुझे लगता है कि ऐसा करने का एक बेहतर तरीका है। मैं ऐसा कुछ करना चाहूंगा:
@ projects.each do | प्रोजेक्ट | & Lt;% = project.name% & gt; & LT; ul & gt; Project.each करो | उपयोगकर्ता | & Lt; li & gt; & lt;% = user.name% & gt; | & Lt;% = user.points_due% & gt; & lt; / li & gt; अंत & lt; / ul & gt; अंत में
आप जिस चीज़ के बारे में बात कर रहे हैं उसे करने के लिए (मॉडल X और तो प्रत्येक मॉडल वाई के लिए कुछ दिखा रहा है), एक नेस्टेड .each पाश (आपके प्रश्न में शामिल किए गए किसी भी तरह कम या ज्यादा) एक सुंदर मानक विधि है यदि डिस्प्ले जटिल हो रहा है, तो आप इसे आंशिक रूप से एक या एक से अधिक परतों में निकाल सकते हैं। इस या अन्य तरीकों के प्रदर्शन के बारे में चिंता करना सबसे अच्छा समय से पहले ही होने की संभावना है। डेटा संरचनाओं को जोड़ तोड़ने के विभिन्न तरीकों का प्रदर्शन आपके पृष्ठ के समग्र प्रदर्शन में एक महत्वपूर्ण कारक नहीं होगा। एक बार जब आप कुछ काम कर रहे हैं, तो देखें कि यह वास्तव में धीमा है, फिर इसे कैसे तेजी से बनाने के बारे में चिंता करें। अपनी टिप्पणियों के आधार पर संपादित करें: Hashes का ऐरे (कुंजियों के प्रतीक के साथ) संभवतः इस डेटा के लिए एरे के सरणी से बेहतर होगा। क्योंकि वे अधिक प्रदर्शनकारी नहीं हैं, बल्कि इसलिए कि यह आपके कोड को और अधिक समझने वाला बना देगा (अपने आप से, भले ही कोई भी इसके लिए कभी भी काम न करे)। विचार करें: एआर वस्तुओं का उपयोग करके, आप प्रत्येक प्रोजेक्ट के नामों को मुद्रित करने के लिए निम्न कार्य करेंगे:
@ projects.each do | प्रोजेक्ट | कहते हैं project.name end यदि आप एक हैश का उपयोग करके इस व्यवहार को अनुकरण करते हैं:
@ projects.each do | प्रोजेक्ट | प्रोजेक्ट [: नाम] समाप्ति जबकि एरेज़ का प्रयोग करते हैं:
@ projects.each do | प्रोजेक्ट | डालता है परियोजना [1] अंत याद रखना बहुत कठिन है, और आपको यह सुनिश्चित करना होगा कि आपका कोड सही क्रम में गुण डालता है, या यह परियोजना के अन्य पहलू हो सकता है मान लें कि आप मेरे साथ सहमत हैं और इस संरचना का उपयोग कर रहे हैं ( @projects = [{title = & gt; 'foo', 'id' = & gt; 1}, { : शीर्षक = & gt; 'बार',: आईडी = & gt; 2}] आदि), यहां आपके द्वारा उल्लिखित कार्य करने का एक तरीका है, बस इच्छित डेटा को मुद्रित करना (मुझे क्या विश्वास है) - उस प्रोजेक्ट में कुछ उपयोगकर्ता के लिए @ points_due में सूचीबद्ध अंकों की संख्या: @ projects.each do | प्रोजेक्ट | प्रोजेक्ट डालता है: [name] @ points_due.select {| pd | पीडी [: project_id] == प्रोजेक्ट [: आईडी]} .each do | project_points | उपयोगकर्ता = @ उपयोगकर्ताओं.select {| u | यू [: आईडी] == project_points [: user_id]}। पहले "# {उपयोगकर्ता [: नाम]} में # परियोजना के बिंदुओं [: अंक]} इस परियोजना पर होने वाले अंक डालता है।" अंत की समाप्ति मुझे आशा है कि यह आपके द्वारा अपेक्षित आउटपुट को अनुमानित करता है, लेकिन यदि नहीं, तो इसका उदाहरण के रूप में उपयोग करना काफी आसान होना चाहिए - का चयन करें। चयन करें संभवतः इसे किया जाएगा। दूसरा संपादित करें: एशेज को हैश में कनवर्ट करना: @projects_as_arrays = [[1, 'दुनिया बदलें '], [2,' बिल्ड एक कंप्यूटर '], [3,' एक सर्कल में भागो ']] @ प्रोजेक्ट्स_स_एचैश = @ प्रोजेक्ट्स_अस_अरे.मैप करो | p_arr | {: आईडी = & gt; P_arr [0],: name = & gt; P_arr [1]} अंत आपको अपने प्रत्येक एरे के लिए इन सामान्य पंक्तियों के साथ कुछ करने में सक्षम होना चाहिए।
Comments
Post a Comment