Computer >> कंप्यूटर ट्यूटोरियल >  >> प्रोग्रामिंग >> Ruby

Ruby के एसोसिएटिव सरणियों में महारत हासिल करें: कुंजी-मूल्य लुकअप के लिए Array#assoc और #rassoc का उपयोग करें

क्या आपके पास कभी एक सरणी में बहुत सारा डेटा था, लेकिन हैश की तरह कुंजी/मूल्य लुकअप करने की आवश्यकता थी? सौभाग्य से, Ruby सरणियों को कुंजी-मूल्य संरचनाओं के रूप में व्यवहार करने के लिए एक तंत्र प्रदान करता है। आइए इसे देखें!

`Array#assoc` और `Array#rassoc` का परिचय

कल्पना करें कि आपको एक जादुई स्टॉक-पिकिंग मशीन दी गई है। हर कुछ मिनटों में यह खरीदने या बेचने के लिए स्टॉक की सिफारिश करता है। आप इसे अपने कंप्यूटर से जोड़ने में कामयाब रहे, और डेटा की एक स्ट्रीम प्राप्त कर रहे हैं जो इस तरह दिखती है:

picks = [ ["AAPL", "buy"], ["GOOG", "sell"], ["MSFT", "sell"] ] 

Google के लिए सबसे हालिया मार्गदर्शन खोजने के लिए, आप `Array#assoc` मेथड का उपयोग कर सकते हैं। यहाँ देखें कि यह कैसा दिखता है:

# डेटा की पहली पंक्ति लौटाता है जहां row[0] == "GOOG" picks.assoc("GOOG") # => ["GOOG", "sell"] 

सबसे हालिया "बेचें" सिफारिश खोजने के लिए, आप `Array#rassoc` मेथड का उपयोग कर सकते हैं।

# डेटा की पहली पंक्ति लौटाता है जहां row[1] == "sell" picks.rassoc("sell") # => ["GOOG", "sell"] 

यदि कोई मेल नहीं मिलता है, तो मेथड्स nil लौटाते हैं:

picks.assoc("CSCO") # => nil picks.rassoc("hold") # => nil 

ऐतिहासिक डेटा

हैश में एक कुंजी के लिए एक से अधिक मान नहीं हो सकते। लेकिन सरणियों में जितने चाहें उतने डुप्लिकेट हो सकते हैं। असोस और रासोस मेथड्स इस मामले में समझदारी भरा काम करते हैं और पहली मिलान वाली पंक्ति लौटाते हैं जो वे पाते हैं। यह हमें कुछ बहुत दिलचस्प चीजें करने देता है।

हमारी काल्पनिक स्टॉक पिकिंग मशीन डेटा की एक स्ट्रीम प्रदान करती है। अंततः, यह किसी विशेष कंपनी के बारे में अपना मन बदलने जा रही है और मुझे वह खरीदने के लिए कहेगी जो उसने पहले मुझे बेचने के लिए कहा था। उस स्थिति में हमारा डेटा ऐसा दिखता है:

picks = [ ["GOOG", "buy"], ["AAPL", "sell"], ["AAPL", "buy"], ["GOOG", "sell"], ["MSFT", "sell"] ] 

यदि मैं इस सभी डेटा को हैश में डाल रहा होता, तो किसी विशेष स्टॉक के लिए सिफारिश को अपडेट करने से मुझे उस स्टॉक के लिए पिछली किसी भी सिफारिश को खोना पड़ता। सरणी के साथ ऐसा नहीं है। मैं सरणी के सामने सिफारिशें प्रीपेंड करते रह सकता हूँ, यह जानते हुए कि Array#assoc हमेशा मुझे सबसे हालिया सिफारिश देगा।

# डेटा की पहली पंक्ति लौटाता है जहां row[0] == "GOOG" picks.assoc("GOOG") # => ["GOOG", "buy"] 

तो हमें हैश की कुंजी-मूल्य अच्छाई मिलती है, साथ में एक मुफ्त ऑडिट ट्रेल।

दो से अधिक कॉलम

असोस के बारे में एक और अच्छी बात यह है कि आप प्रति सरणी केवल दो कॉलम तक सीमित नहीं हैं। आप जितने चाहें उतने कॉलम रख सकते हैं। मान लीजिए आपने प्रत्येक खरीद/बिक्री सिफारिश में एक टाइमस्टैम्प जोड़ा।

picks = [ ["AAPL", "buy", "2015-08-17 12:11:55 -0700"], ["GOOG", "sell", "202207/2022070811463167.jpg" /> आप दो धनात्मक पूर्णांकों का औसत इस तरह निकाल सकते हैं: (x&y)+((x^y)>>1)

त्वरित व्युत्क्रम वर्गमूल

मैं बिट ट्विडलिंग पर एक ब्लॉग पोस्ट नहीं कर सकता बिना सबसे प्रसिद्ध उदाहरणों में से एक को शामिल किए। वह है 1999 के क्वेक 3 एरिना स्रोत कोड से जॉन कार्मैक का त्वरित व्युत्क्रम वर्गमूल सन्निकटन। एल्गोरिदम उनका नहीं है, लेकिन सबसे प्रसिद्ध कार्यान्वयन उनका है।

मैं इसे सीधे Ruby में पोर्ट करने का प्रयास नहीं करने जा रहा हूँ, क्योंकि यह एक फ्लोटिंग पॉइंट संख्या के बाइनरी प्रतिनिधित्व का निर्माण करके काम करता है जिस तरह से C से Ruby में सीधे अनुवाद योग्य नहीं है।

float Q_rsqrt( float number ) { long i; float x2, y; const float threehalfs = 1.5F; x2 = number * 0.5F; y = number; i = * ( long * ) &y; // evil floating point bit level hacking i = 0x5f3759df - ( i >> 1 ); // what the fuck? y = * ( float * ) &i; y = y * ( threehalfs - ( x2 * y * y ) ); // 1st iteration // y = y * ( threehalfs - ( x2 * y * y ) ); // 2nd iteration, this can be removed return y; } 

  1. रूबी मैट्रिक्स को समझना: परिभाषा, अनुप्रयोग और उन्हें कैसे बनाएं रूबी मैट्रिक्स को समझना: परिभाषा, अनुप्रयोग और उन्हें कैसे बनाएं

    मैट्रिक्स एक 2D (2-डायमेंशनल) ऐरे है जिसका उपयोग स्प्रेडशीट जैसे डेटा को स्टोर और काम करने के लिए किया जा सकता है। इनका उपयोग किया जा सकता है: टेबल गेम में बोर्ड को दर्शाना (शतरंज, चेकर्स, आदि) आंकड़े और डेटा विश्लेषण प्लॉट्स और ग्राफ़ उत्पन्न करना क्योंकि यह एक शक्तिशाली डेटा संरचना है इसलिए इसका

  1. रूबी 2.6 में MJIT को समझना: जस्ट-इन-टाइम कंपाइलर प्रदर्शन को कैसे बढ़ाता है रूबी 2.6 में MJIT को समझना: जस्ट-इन-टाइम कंपाइलर प्रदर्शन को कैसे बढ़ाता है

    रूबी का प्रदर्शन संस्करण दर संस्करण बहुत सुधर रहा है… और रूबी विकास टीम रूबी को और भी तेज़ बनाने के लिए हर संभव प्रयास कर रही है! इन प्रयासों में से एक 3×3 प्रोजेक्ट है। लक्ष्य? रूबी 3.0, रूबी 2.0 से 3 गुना तेज़ होगा। इस प्रोजेक्ट का हिस्सा नया MJIT कंपाइलर है, जो इस लेख का विषय है। MJIT समझाया गया

  1. Ruby on Rails में महारत: इस सिद्ध फ्रेमवर्क के साथ शक्तिशाली वेब ऐप्स तेजी से बनाएं Ruby on Rails में महारत: इस सिद्ध फ्रेमवर्क के साथ शक्तिशाली वेब ऐप्स तेजी से बनाएं

    Ruby on Rails (कभी-कभी RoR) सबसे लोकप्रिय ओपन-सोर्स वेब एप्लिकेशन फ्रेमवर्क है। यह Ruby प्रोग्रामिंग भाषा के साथ बनाया गया है। आप सिंपल से लेकर कॉम्प्लेक्स तक एप्लिकेशन बनाने में मदद के लिए Rails का उपयोग कर सकते हैं, Rails के साथ आप जो हासिल कर सकते हैं उसकी कोई सीमा नहीं है! फ्रेमवर्क क्या है? फ्र