आज आप सीखेंगे कि रूबी ट्रांसपोज़ विधि का उपयोग करके रूबी में ग्रिड से कैसे निपटें।
कल्पना कीजिए कि आपके पास एक पूर्ण ग्रिड है, मान लीजिए कि एक बहु-आयामी सरणी के रूप में एक 3×3 वर्ग है।
और आप पंक्तियों को लेना और उन्हें स्तंभों में बदलना चाहते हैं ।
आप ऐसा क्यों करना चाहेंगे?
क्लासिक गेम के लिए एक उपयोग है:टिक-टैक-टो।
आप अपने बोर्ड को ग्रिड के रूप में स्टोर करते हैं। फिर एक विजयी चाल खोजने के लिए आपको पंक्तियों . की जांच करनी होगी , कॉलम &विकर्ण ।
समस्या यह है कि यदि आप अपने ग्रिड को एक सरणी के रूप में संग्रहीत कर रहे हैं तो आपको केवल पंक्तियों तक सीधी पहुंच मिलती है।
कॉलम द हार्ड वे
"डायरेक्ट एक्सेस" से मेरा मतलब है कि आप अपने एरे पर जा सकते हैं (each
. के साथ) , map
, आदि) आवश्यकता से अधिक सरणी अनुक्रमण का उपयोग किए बिना।
आइए एक उदाहरण देखें!
यहां एक ग्रिड है :
grid = [ [1,2,3], [4,5,6], [7,8,9] ]
यहां एक दृश्य है जो मैंने आपके लिए बनाया है :
आप इंडेक्स को संदर्भित करके कॉलम प्राप्त कर सकते हैं।
उदाहरण के लिए, पहला कॉलम होगा :
[grid[0][0], grid[1][0], grid[2][0]] # [1, 4, 7]
लेकिन पहली पंक्ति बस यही है :
grid[0] # [1, 2, 3]
हम कॉलम के साथ काम करना पंक्तियों के साथ काम करने जितना आसान कैसे बना सकते हैं?
स्तंभ आसान तरीका
ऐसा करने का आसान तरीका है Array#transpose पद्धति का उपयोग करना।
उदाहरण :
columns = grid.transpose
हां, आपको बस इतना ही करना है!
अब आप इस तरह का पहला कॉलम प्राप्त कर सकते हैं:
columns[0] # [1, 4, 7]
जैसा कि आप देख सकते हैं कि बहुत सी विधियों को जानने से आपका बहुत सारा काम बच सकता है 🙂
टिक-टैक-टो
मैं पूरी बात समझाने वाला नहीं हूं। मैं आपको केवल यह दिखाना चाहता हूं कि यह विधि किसी वास्तविक परियोजना पर कैसे लागू हो सकती है।
टिक-टैक-टो का खेल जीतने के लिए आपको एक पंक्ति, एक स्तंभ या एक विकर्ण भरना होगा।
यहां पंक्तियों की जांच के लिए कोड दिया गया है :
def check_rows @board.each { |row| return row.first if all_equal?(row) } end
और यहां कॉलम के लिए कोड है :
def check_columns @board.transpose.each { |row| return row.first if all_equal?(row) } end
ध्यान दें कि केवल transpose
का अंतर कैसे होता है विधि!
यह रहा all_equal?
विधि:
def all_equal?(row) return if row.first == nil row.each_cons(2).all? { |x,y| x == y } end
आप इस पोस्ट को एन्यूमरेबल मेथड्स पर पढ़कर उस प्रत्येक_कॉन्स मेथड के बारे में अधिक जान सकते हैं।
सारांश
आपने स्थानान्तरण विधि के बारे में जान लिया है।
एक आदर्श ग्रिड को देखते हुए, ट्रांसपोज़ आपको आसान पहुँच के लिए पंक्तियों को कॉलम में बदलने की अनुमति देता है।
अगर आपको यह पोस्ट अच्छी लगी हो तो आप मेरी किताब रूबी डीप डाइव की एक प्रति खरीदने पर विचार कर सकते हैं।