2011-06-16 16 views
10

मैं निम्नलिखितएक पंक्ति

e = [] 
m = [] 
p = [] 
t = [] 
...and so on for about 10 different arrays 

की तरह कुछ करने की ज़रूरत है वहाँ एक लाइन पर इन सभी सरणियों बनाने के लिए एक रास्ता है कई सरणियों बनाएँ?

उत्तर

20

आप इसे निम्नलिखित का उपयोग कर सकते हैं: [[]]*10 पुनरावृत्ति के लिए है और सिर्फ एक ही वस्तु को दोहरा रहा है

e,m,p,t... = Array.new(10) { [] } 

यह पता चला

[[]]*10 

जाने के लिए सही तरीका नहीं है, [] 10 कई बार, इसलिए सभी चर एक ही ऑब्जेक्ट को सौंपा जा रहा है।

+2

पहला समाधान अच्छा है (ओजीजी एच आप केवल 'Array.new (10) {[]} 'कर सकते हैं। हालांकि, आपके दूसरे समाधान में गॉचा है। यदि चर में से कोई एक संशोधित हो जाता है (उदाहरण के लिए 'e <<" foo "'), तो 'm',' p', 't' आदि भी संशोधित हो जाते हैं। –

+0

@Andrew Grimm हाँ, इस तरह मैंने वास्तव में शुरुआत की, मैंने सोचा कि क्यों नहीं [] ब्लॉक के भीतर Array.new के बजाय, और फिर पहले Array.new को हटाने की कोशिश करने के लिए चला गया। लेकिन यह अजीब है! मैंने अभी पुष्टि की है कि आपने क्या कहा है, क्या आप शायद समझा सकते हैं कि ऐसा क्यों है? –

+0

@ ड्रुवा: यह 10 अलग-अलग सरणी के बजाए 10 बार संदर्भित एक ही सरणी है। आप ऑब्जेक्ट पर 'object_id' को कॉल करके इसे पा सकते हैं। –

6

कई चर घोषणा की तरह एक a1, a2, a3 = 3, 10, 4

e, m, p, t ... = [], [], [], [] ... 
4

में लाइन मैं, क्या उन 10 विभिन्न सरणियों हैं पर उत्सुक हूँ क्योंकि मुझे लगता है कि वे 10 विभिन्न चर लेकिन सिर्फ एक नहीं होना चाहिए। आप किसी भी संदर्भ देने के नहीं है, इसलिए मैं केवल अनुमान लगा सकते हैं, निम्नलिखित की तरह कुछ बेहतर हो सकता है:

whatever = Hash.new{|h, k| h[k] = []} 
whatever[:e] # => [] 
whatever[:m] << 42 
whatever[:m] # => [42] 
# etc... 

अन्यथा, zomboid के रूप में लिखा है:

e, m, p, t ... = [], [], [], [] ... 
+0

दिलचस्प बिंदु! वे वास्तव में इस मामले में 10 अलग-अलग चर हैं क्योंकि उनका उपयोग पूरी तरह अलग उद्देश्यों के लिए किया जाता है। उस वैकल्पिक दृष्टिकोण के लिए धन्यवाद। +1 – sscirrus

3

सब क्या विफल रहता है

> p, q, r = v = Array.new(3, []) 
=> [[], [], []] 
> v.map(&:object_id) 
=> [70155104393020, 70155104393020, 70155104393020] 
> p = q = r = [] 
=> [] 
> [p, q, r].map(&:object_id) 
=> [70155104367380, 70155104367380, 70155104367380] 

> p, q, r = v = Array.new(3){ [] } 
=> [[], [], []] 
> v.map(&:object_id) 
=> [70155104731780, 70155104731760, 70155104731740] 
संबंधित मुद्दे