मुझे एक 2d सरणी प्रारंभ करना है, जैसा कि निम्न है
1 0 0 0 2 2 0 0 0 3 0 0 0 0 4
जब इनपुट स्ट्रिंग "1234"
दिया जाता है
ऐसा करने के लिए मेरा कार्य इस प्रकार है:
डीईफ़ मज़ेदार (str) maxlength = Array.new (str.length, Array.new (str.length, 0) ) (0..स्ट्रेट। लैंप -1) .ईच करो | मैं | Maxlength [i] [i] = str [i] .to_i अंत प्रिंट अधिकतम लार्ंन्थ अंत प्रिंट मज़ा ("1234")
यह मुझे देता है
1 2 3 4 1 2 3 4 1 2 3 4 1 2 3 4
जो मुझे नहीं चाहिए।
मुझे जो आउटपुट प्राप्त करना चाहते हैं ?
यहाँ सबसे बड़ी समस्या यह है कि आप दो आयामी सरणी नहीं बना रहे हैं आपको लगता है कि आप हैं, लेकिन इसके बजाय आप दो सरणियां का निर्माण कर रहे हैं इसका कारण यह है कि आप एक एकल सरणी में एक डिफ़ॉल्ट के रूप में गुजर रहे हैं, एक ब्लॉक नहीं जो उन्हें उत्पन्न कर सकता है।
आप जो उम्मीद कर रहे थे वह यह था:
array1 = [ Array1, array22, array23, array24]
आप वास्तव में क्या प्राप्त कर रहे थे यह है:
array1 = [array2, array2, array2, array2] यह एक आखिरी तर्क को एक ब्लॉक में परिवर्तित करके आसानी से तय किया जाता है:
def मज़ेदार (str) maxlength = Array.new (str.length) {Array। नया (str.length, 0)} str.chars.collect (और: to_i) .each_with_index करना | v, i | Maxlength [i] [i] = v अंत प्रिंट अधिकतमलेलग एंड प्रिंट मज़े ("1234")
मैंने भी वर्ण
का उपयोग करने के लिए स्विच किया है जो कि स्ट्रिंग जैसे आप चाहते हैं।
तो समस्या यह थी कि आप सही ढंग से स्थितियों को स्थापित कर रहे थे, लेकिन जैसा कि सभी दूसरे स्तर के सरणियों का एक ही सरणी था, आपको वह परिणाम नहीं मिला जिसकी आप उम्मीद कर रहे थे।
अपडेट: क्रिस के जवाब से प्रत्येक_वि इन_इनडेक्स
जो मनमानी संख्याओं के साथ यह काम करता है।
No comments:
Post a Comment