दिलचस्प पोस्ट
एक नेस्टेड जटिल ऑब्जेक्ट से मान प्राप्त करना जिसे आंशिक दृश्य में पारित किया गया है कैसे विजेट के दाईं ओर नीचे त्रिभुज के बिना एंड्रॉइड स्पिनर बनाने के लिए सामग्री के आधार पर सीएसएस नियम कैसे iPhone कैमरा फ्लैश चालू / बंद करने के लिए? पंक्तियों को एक तालिका से दूसरे में कॉपी करें, डुप्लिकेट को अनदेखा कर दें नियमित अभिव्यक्तियाँ और एक पूरे वर्ण समूह को नकारना JQuery का उपयोग करके PHP $ _SESSION सेट करना आईओएस में गैर आलसी छवि लोड हो रहा है प्रोलॉग एकुमुलेटर वे वास्तव में एक "अलग" अवधारणा हैं? PHP के साथ एक .JSON फ़ाइल में डेटा जोड़ें मैं एक परिप्रेक्ष्य को एक UIView में रूपांतरण कैसे लागू करूं? जावा में दो सेट की तुलना करने का सबसे तेज़ तरीका क्या है? मैं javascript associative सरणी से ऑब्जेक्ट कैसे निकालूं? वेब ब्राउजर में एक दस्तावेज़ में जावास्क्रिप्ट से सी # कोड को खोलें आर में अनुलग्न () का उपयोग करना उचित क्यों नहीं है, और मुझे इसके बजाय क्या उपयोग करना चाहिए?

रूबी में दो-आयामी arrays और एक्सेस उप-एरेज़ बनाएँ

मुझे आश्चर्य है कि क्या कोई दो आयामी सरणी बनाने और इसे में किसी भी क्षैतिज या ऊर्ध्वाधर उप सरणी का उपयोग करने की संभावना है?

मेरा मानना ​​है कि हम निम्नलिखित मामले में एक क्षैतिज उप सरणी का उपयोग कर सकते हैं:

x = Array.new(10) { Array.new(20) } x[6][3..8] = 'something' 

लेकिन जहां तक ​​मैं समझता हूं, हम इसे इस तरह से नहीं देख सकते हैं:

 x[3..8][6] 

मैं इस सीमा से कैसे बच सकता हूं या हैक कर सकता हूं?

Solutions Collecting From Web of "रूबी में दो-आयामी arrays और एक्सेस उप-एरेज़ बनाएँ"

2 आयामी Arrays के साथ कुछ समस्याएं हैं जिस तरह से आप उन्हें लागू करते हैं।

 a= [[1,2],[3,4]] a[0][2]= 5 # works a[2][0]= 6 # error 

Hash रूप में Hash

मैं मल्टी आयामी Arrays लिए Hashes का उपयोग करना पसंद करता हूं

 a= Hash.new a[[1,2]]= 23 a[[5,6]]= 42 

इसका लाभ है, कि आपको मैन्युअल रूप से स्तंभ या पंक्तियां बनाने की ज़रूरत नहीं है। हैश में डालना लगभग ओ (1) है , इसलिए इसमें कोई दोष नहीं है, जब तक आपका Hash बहुत बड़ा नहीं हो जाता है

आप सभी निर्दिष्ट नहीं तत्वों के लिए भी एक डिफ़ॉल्ट मान सेट कर सकते हैं

 a= Hash.new(0) 

तो अब के बारे में कैसे subarrays पाने के लिए

 (3..5).to_a.product([2]).collect { |index| a[index] } [2].product((3..5).to_a).collect { |index| a[index] } 

(a..b).to_a ओ में चलता है (एन) एक Hash से एक तत्व को पुनः प्राप्त करना लगभग ओ (1) है, इसलिए इकट्ठा लगभग ओ (एन) में चलता है। अब इसे ओ (एन) से तेज़ी से बनाने का तरीका है, क्योंकि एन तत्वों की कॉपी हमेशा हे (एन) है।

Hashes समस्याएं हो सकती हैं जब वे बहुत बड़ी हो रही हैं इसलिए मैं इस तरह एक बहुआयामी Array लागू करने में दो बार सोचूंगा, अगर मुझे पता था कि मेरे डेटा की मात्रा बड़ी हो रही है

आपने अपने वास्तविक लक्ष्य को नहीं बताया, लेकिन शायद यह मदद कर सकता है:

 require 'matrix' # bundled with Ruby m = Matrix[ [1, 2, 3], [4, 5, 6] ] m.column(0) # ==> Vector[1, 4] 

(और वेक्टर सरणियों की तरह कार्य करते हैं)

या, जैसा आप चाहते हैं, उसी तरह एक समान चिह्न का उपयोग करना:

 m.minor(0..1, 2..2) # => Matrix[[3], [6]] 
 rows, cols = x,y # your values grid = Array.new(rows) { Array.new(cols) } 

तत्वों तक पहुंचने के लिए, यह आलेख आपको जिस तरीके से एक सरणी का आवंटन करने के लिए कदम से कदम के लिए बहुत अच्छा है:

रूबी सरणी कैसे करें

यहाँ एक 3D सरणी केस है

 class Array3D def initialize(d1,d2,d3) @data = Array.new(d1) { Array.new(d2) { Array.new(d3) } } end def [](x, y, z) @data[x][y][z] end def []=(x, y, z, value) @data[x][y][z] = value end end 

आप किसी अन्य रूबी सरणी की तरह प्रत्येक एआर के उप-भागों का उपयोग कर सकते हैं। @ डेटा [0..2] [3..5] [8..10] = 0 आदि

x.transpose[6][3..8] या x[3..8].map {|r| r [6]} x[3..8].map {|r| r [6]} जो आप चाहते हैं वह दे देंगे

उदाहरण:

 a = [ [1, 2, 3, 4, 5], [6, 7, 8, 9, 10], [11, 12, 13, 14, 15], [21, 22, 23, 24, 25] ] #a[1..2][2] -> [8,13] puts a.transpose[2][1..2].inspect # [8,13] puts a[1..2].map {|r| r[2]}.inspect # [8,13] 

मुझे पूरा यकीन है कि यह बहुत आसान हो सकता है

 2.0.0p247 :032 > list = Array.new(5) => [nil, nil, nil, nil, nil] 2.0.0p247 :033 > list.map!{ |x| x = [0] } => [[0], [0], [0], [0], [0]] 2.0.0p247 :034 > list[0][0] => 0 
 a = Array.new(Array.new(4)) 0.upto(a.length-1) do |i| 0.upto(a.length-1) do |j| a[i[j]] = 1 end end 0.upto(a.length-1) do |i| 0.upto(a.length-1) do |j| print a[i[j]] = 1 #It's not a[i][j], but a[i[j]] end puts "\n" end 

यहाँ सरल संस्करण है

  #one a = [[0]*10]*10 #two row, col = 10, 10 a = [[0]*row]*col 

यहां "2 डी" सरणी बनाने का एक आसान तरीका है

 2.1.1 :004 > m=Array.new(3,Array.new(3,true)) => [[true, true, true], [true, true, true], [true, true, true]]