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

रूबी में Transpose मेथड का उपयोग करके आसानी से पंक्तियों को स्तंभों में बदलें

आज आप सीखेंगे कि रूबी transpose मेथड का उपयोग करके ग्रिड्स से कैसे निपटें।

कल्पना करें कि आपके पास एक परफेक्ट ग्रिड है, मान लीजिए एक 3×3 वर्ग, बहुआयामी सरणी के रूप में।

और आप पंक्तियों को लेना और उन्हें स्तंभों में बदलना चाहते हैं।

आप ऐसा क्यों करना चाहेंगे?

एक उपयोग क्लासिक गेम के लिए है: टिक-टैक-टो।

आप अपने बोर्ड को ग्रिड के रूप में संग्रहीत करते हैं। फिर जीतने वाली चाल ढूंढने के लिए आपको पंक्तियों, स्तंभों और विकर्णों की जांच करनी होगी।

समस्या यह है कि यदि आप अपने ग्रिड को सरणी के रूप में संग्रहीत कर रहे हैं तो आपको केवल पंक्तियों तक सीधी पहुंच मिलती है।

कठिन तरीके से स्तंभ

"सीधी पहुंच" से मेरा मतलब है कि आप अपनी सरणी पर जा सकते हैं (each, map, आदि के साथ) बिना आवश्यकता से अधिक सरणी इंडेक्सिंग का उपयोग किए।

आइए एक उदाहरण देखें!

यहाँ एक ग्रिड है:

 grid = [ [1,2,3], [4,5,6], [7,8,9] ] 

यहाँ आपके लिए एक विज़ुअल है:

रूबी में Transpose मेथड का उपयोग करके आसानी से पंक्तियों को स्तंभों में बदलें

आप इंडेक्स को रेफरेंस करके स्तंभ प्राप्त कर सकते हैं।

उदाहरण के लिए, पहला स्तंभ होगा:

 [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 

आप Enumerable मेथड्स पर इस पोस्ट को पढ़कर each_cons मेथड के बारे में अधिक जान सकते हैं।

सारांश

आपने transpose मेथड के बारे में सीखा।

एक परफेक्ट ग्रिड दिए जाने पर, transpose आपको पंक्तियों को स्तंभों में बदलने की अनुमति देता है ताकि आसान पहुंच हो सके।

यदि आपको यह पोस्ट पसंद आया तो आप मेरी किताब रूबी डीप डाइव की एक प्रति खरीदने पर विचार कर सकते हैं।

  1. Ruby के Map मेथड में महारत: उदाहरणों के साथ एक व्यावहारिक गाइड Ruby के Map मेथड में महारत: उदाहरणों के साथ एक व्यावहारिक गाइड

    Map एक Ruby मेथड है जिसका उपयोग आप Arrays, Hashes और Ranges के साथ कर सकते हैं। map का मुख्य उपयोग डेटा को ट्रांसफॉर्म करना है। उदाहरण के लिए: स्ट्रिंग्स की एक सरणी दिए जाने पर, आप हर स्ट्रिंग पर जा सकते हैं और हर कैरेक्टर को UPPERCASE बना सकते हैं। या यदि आपके पास User ऑब्जेक्ट्स की एक सूची है... आ

  1. Ruby में N-क्वीन्स चुनौती में महारत: चरण-दर-चरण समाधान Ruby में N-क्वीन्स चुनौती में महारत: चरण-दर-चरण समाधान

    N-क्वीन्स एक दिलचस्प कोडिंग चुनौती है जहां आपको N * N बोर्ड पर N क्वीन्स रखनी होती हैं। यह ऐसा दिखता है: एक क्वीन्स सभी दिशाओं में चल सकती है: वर्टिकल हॉरिजॉन्टल डायगोनल समाधान (कई हो सकते हैं) को बोर्ड पर सभी क्वीन्स रखनी चाहिए और हर क्वीन्स हर दूसरी क्वीन्स की पहुंच से बाहर होनी चाहिए। इस लेख म

  1. रूबी के Enumerable मॉड्यूल में महारत: एक व्यावहारिक गाइड + मेरा शीर्ष मेथड रूबी के Enumerable मॉड्यूल में महारत: एक व्यावहारिक गाइड + मेरा शीर्ष मेथड

    Enumerable क्या है? Enumerable पुनरावृति मेथड्स का एक संग्रह है, एक रूबी मॉड्यूल, और रूबी को एक महान प्रोग्रामिंग भाषा बनाने का एक बड़ा हिस्सा। Enumerable में सहायक मेथड्स शामिल हैं जैसे: map select inject Enumerable मेथड्स उन्हें एक ब्लॉक देकर काम करते हैं। उस ब्लॉक में आप उन्हें बताते हैं कि आप