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

रूबी ट्रांसपोज़ विधि के साथ पंक्तियों को कॉलम में बदलें

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

कल्पना कीजिए कि आपके पास एक पूर्ण ग्रिड है, मान लीजिए कि एक बहु-आयामी सरणी के रूप में एक 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

आप इस पोस्ट को एन्यूमरेबल मेथड्स पर पढ़कर उस प्रत्येक_कॉन्स मेथड के बारे में अधिक जान सकते हैं।

सारांश

आपने स्थानान्तरण विधि के बारे में जान लिया है।

एक आदर्श ग्रिड को देखते हुए, ट्रांसपोज़ आपको आसान पहुँच के लिए पंक्तियों को कॉलम में बदलने की अनुमति देता है।

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


  1. रूबी मानचित्र विधि का उपयोग कैसे करें (उदाहरण के साथ)

    मैप एक रूबी विधि है जिसका उपयोग आप ऐरे, हैश और रेंज के साथ कर सकते हैं। मानचित्र का मुख्य उपयोग डेटा को ट्रांसफ़ॉर्म करना है। उदाहरण के लिए : स्ट्रिंग्स की एक सरणी को देखते हुए, आप प्रत्येक स्ट्रिंग पर जा सकते हैं और प्रत्येक वर्ण को अपरकेस बना सकते हैं। या यदि आपके पास User . की सूची है ऑब्जेक्

  1. रूबी के साथ एन-क्वींस समस्या का समाधान

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

  1. रूबी एन्यूमरेबल मॉड्यूल के लिए एक बुनियादी गाइड (+ मेरी पसंदीदा विधि)

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