मुझे एपीआई कॉल के जवाब के रूप में ऑब्जेक्ट्स का प्रतिनिधित्व करने वाले हैंश की एक सरणी मिली है। मुझे कुछ हैंश से डेटा खींचने की ज़रूरत है, और एक विशेष कुंजी हैश ऑब्जेक्ट के लिए आईडी के रूप में कार्य करती है। मैं सरणी को हैश के रूप में कुंजी के साथ एक हैश में परिवर्तित करना चाहता हूं, और मान उस आईडी के साथ मूल हैश के रूप में परिवर्तित करना चाहता हूं।हैश-ऑफ-हैश को हैश-ऑफ़-हैश में कनवर्ट करें, हैश की विशेषता द्वारा अनुक्रमित
api_response = [
{ :id => 1, :foo => 'bar' },
{ :id => 2, :foo => 'another bar' },
# ..
]
ideal_response = {
1 => { :id => 1, :foo => 'bar' },
2 => { :id => 2, :foo => 'another bar' },
# ..
}
दो तरीके मैं यह कर के बारे में सोच सकता है:
यहाँ मैं किस बारे में बात कर रहा हूँ है।
- को
ideal_response
(नीचे) डेटा प्रत्येक रिकॉर्ड मैं का उपयोग करने की जरूरत है के लिए - उपयोग
api_response.find { |x| x[:id] == i }
मैप करें। - एक विधि जिसे मैं अनजान हूं, संभवतः
map
का उपयोग करने का एक तरीका हैश बनाने के लिए।
मैपिंग की मेरी विधि:
keys = data.map { |x| x[:id] }
mapped = Hash[*keys.zip(data).flatten]
मैं मदद नहीं कर सकता लेकिन लगता है कि एक अधिक performant, ऐसा करने का tidier तरीका है की तरह। विकल्प 2 बहुत ही प्रभावशाली होता है जब बहुत कम संख्या में रिकॉर्ड्स एक्सेस किए जाने की आवश्यकता होती है। मानचित्रण यहां उत्कृष्टता प्राप्त करता है, लेकिन प्रतिक्रिया में बहुत सारे रिकॉर्ड होने पर यह टूटना शुरू हो जाता है। शुक्र है, मुझे 50-100 से अधिक रिकॉर्ड होने की उम्मीद नहीं है, इसलिए मैपिंग पर्याप्त है।
क्या रूबी में ऐसा करने का एक स्मार्ट, साफ, या अधिक प्रदर्शन करने वाला तरीका है?
यह प्रदर्शन और स्वच्छता के मामले में मैपिंग से बेहतर है, लेकिन 'डेटा [आईडी] [0] 'या' डेटा [आईडी] के माध्यम से रिकॉर्ड तक पहुंच रहा है। पहला' थोड़ा बोझिल है। हालांकि, मैं इस बिंदु पर नाइटपिक कर रहा हूं। चलो देखते हैं कि कोई और अंगूठी में अपनी टोपी फेंकने की परवाह करता है। – coreyward
यह एक डुप्लिकेट कुंजी में चलाने की संभावना का परिणाम है। 'group_by' अज्ञात डेटा के साथ सुरक्षा के लिए डिज़ाइन किया गया एक सामान्य दिनचर्या है। अनुप्रयोग-विशिष्ट ज्ञान होने के नाते, जैसे कि आपको कभी भी, कभी भी, एक डुप्लिकेट और आने वाली कुंजी टकराव और डेटा हानि का सामना करना पड़ता है, डेटा संरचना को एक स्तर से सरल बनाने की अनुमति देगा। –