रूबी का उपयोग करके एक चरण में एक सरणी को कैसे प्रारंभ करें?


105

मैं इस तरह से एक सरणी इनिशियलाइज़ करता हूँ:

array = Array.new
array << '1' << '2' << '3'

क्या एक कदम में ऐसा करना संभव है? यदि हां, तो कैसे?


20
+1 सिर्फ सिंगल सिंगल-लाइन के लिए बार-बार पुश करना। :)
Phrogz

1
@ फ्रॉग थोड़ा छोटा array = Array.new << 1 << 2 << 3 :;)
अलेक्जेंडर सुरफेल

@AlexanderSuraphel स्ट्रिंग्स के एक सरणी के बजाय फिक्सनम्स की एक सरणी बनाता है।
फोग्ज

1
@Phrogz मैं सिर्फ यह बताना चाहता था कि यह और भी छोटा हो सकता है। आपको बस बदलना 1होगा '1'
अलेक्जेंडर सुरफेल

जवाबों:


192

आप एक सरणी शाब्दिक का उपयोग कर सकते हैं:

array = [ '1', '2', '3' ]

आप एक सीमा का उपयोग भी कर सकते हैं:

array = ('1'..'3').to_a  # parentheses are required
# or
array = *('1'..'3')      # parentheses not required, but included for clarity

व्हाट्सएप-सीमांकित स्ट्रिंग्स के सरणियों के लिए, आप पेरेंट स्ट्रिंग सिंटैक्स का उपयोग कर सकते हैं :

array = %w[ 1 2 3 ]

Array.newप्रत्येक प्रविष्टि के लिए मान क्या होगा, यह निर्धारित करने के लिए आप एक ब्लॉक भी पास कर सकते हैं :

array = Array.new(3) { |i| (i+1).to_s }

अंत में, हालांकि यह तीन तारों के एक ही सरणी का उत्पादन नहीं करता है, जैसा कि ऊपर दिए गए अन्य उत्तर हैं, ध्यान दें कि आप सरणियों का निर्माण करने के लिए रूबी 1.8.7+ में एन्यूमरेटर का उपयोग कर सकते हैं; उदाहरण के लिए:

array = 1.step(17,3).to_a
#=> [1, 4, 7, 10, 13, 16]

4
विस्तृत जवाब के लिए प्लस एक, भले ही मैं स्पैट ओवर to_a( [*'1'..'3']) पसंद करता हूं ।
माइकल कोहल

@MichaelKohl मैं सहमत हूँ; मैं (गलत) धारणा के तहत था कि आप 1.8.6 में श्रेणियों को अलग नहीं कर सकते। मैं जोड़ दूँगा, धन्यवाद! ध्यान दें कि आपको एक सरणी शाब्दिक के भीतर विभाजन करने की आवश्यकता नहीं है (जब तक कि आप अलग-अलग नहीं कर रहे हैं)।
मेंढक

मुझे पता है, यह सिर्फ इतना है कि मैं ज्यादातर उस उद्देश्य के लिए स्पैट का उपयोग करता हूं (जो कि है) और मुझे यह भी पसंद है कि यह दिखावा करता है कि आप किस चीज के साथ समाप्त होते हैं।
माइकल कोहल

2
इसके अलावा, वर्ग विधि एरे :: [] का उपयोग किया जा सकता है: Array[ "1","2","3"] #=> ["1","2","3"](मुझे नहीं लगता कि इस पद्धति का सरणी शाब्दिक निर्माणकर्ता के साथ कुछ भी करना है)। आप शीर्ष-स्तरीय कर्नेल # ऐरे का उपयोग कर सकते हैं (विधि का नाम वर्ग नाम जैसा दिखता है)Array(1..5) #=> [1,2,3,4,5]
b1_

* क्या करता है? जहाँ मैं उस के लिए प्रलेखन पा सकते हैं?
अर्नोल्ड रोआ

22

एक लाइन:

array = [] << 1 << 2 << 3   #this is for fixnums.

या

 a = %w| 1 2 3 4 5 |

या

 a = [*'1'..'3']

या

 a = Array.new(3, '1')

या

 a = Array[*'1'..'3']

8
मैंने इसे वोट नहीं किया, लेकिन मैं अनुमान लगा रहा हूं क्योंकि यह तीन तरीकों को लागू [1,2,3]करता है और एक एकल आरंभीकरण करता है, जिसके विपरीत सरणी बढ़ता है। इसके अलावा, तुम्हारा चरित्र अधिक है। इसके अलावा, आपने फ़िक्नम्स की एक सरणी बनाई है, जबकि ओपी स्ट्रिंग्स की एक सरणी के बारे में पूछ रहा था।
फ्रॉग्ज

8

उपरोक्त उत्तरों के साथ, आप यह भी कर सकते हैं

    =>  [*'1'.."5"]   #remember *
    => ["1", "2", "3", "4", "5"]

1
1.9 में आप इसे इस तरह भी कर सकते हैं >> [*?1..?5] #=> ["1", "2", "3", "4", "5"]:।
माइकल कोहल

7

यह साबित करने के लिए एक से अधिक छह तरीके हैं:

plus_1 = 1.method(:+)
Array.new(3, &plus_1) # => [1, 2, 3]

यदि 1. मैथोड (: +) संभव नहीं था, तो आप भी कर सकते थे

plus_1 = Proc.new {|n| n + 1}
Array.new(3, &plus_1) # => [1, 2, 3]

निश्चित रूप से, यह इस परिदृश्य में ओवरकिल है, लेकिन अगर plus_1यह वास्तव में लंबी अभिव्यक्ति थी, तो आप इसे सरणी निर्माण से अलग लाइन पर रखना चाह सकते हैं।


3

तुम कर सकते हो

array = ['1', '2', '3']

जैसा कि अन्य लोगों ने नोट किया है, आप किसी सरणी को% w संकेतन के साथ आरंभ कर सकते हैं जैसे:

array = %w(1 2 3)

या

array = %w[1 2 3]

कृपया ध्यान दें कि दोनों मामलों में प्रत्येक तत्व एक पूर्णांक के बजाय एक स्ट्रिंग है। इसलिए यदि आप एक ऐसा सरणी चाहते हैं जिसके तत्व पूर्णांक हैं, तो आपको प्रत्येक तत्व को एपॉस्ट्रॉफ़ के साथ नहीं लपेटना चाहिए:

array_of_integers = [1, 2, 3]

इसके अलावा, आपको तत्वों के बीच अल्पविराम लगाने की आवश्यकता नहीं है (जो इस% w संकेतन के बिना एक सरणी बनाते समय आवश्यक है)। यदि आप ऐसा करते हैं (जो मैंने अक्सर गलती से किया था), जैसे कि:

wrong_array = %w(1, 2, 3)

इसके तत्व तीन तार होंगे ---- "1,", "2,", "3"। तो अगर तुम करते हो:

puts wrong_array

उत्पादन होगा:

1,
2,
3
=>nil

जो हम यहां चाहते हैं वह नहीं है।

उम्मीद है कि इस बिंदु को स्पष्ट करने में मदद करता है!


2

इस तरह की एक सरणी बनाने के लिए आप कर सकते हैं:

array = ['1', '2', '3']

2

यदि आपके पास स्ट्रिंग्स का एक ऐरे है, तो आप इसे इस तरह से इनिशियलाइज़ भी कर सकते हैं:

array = %w{1 2 3}

प्रत्येक तत्व को किसी भी व्हाट्सएप से अलग करें


1

आप []इस तरह से तत्वों को लिखकर एक चरण में एक सरणी को इनिशियलाइज़ कर सकते हैं :

array = ['1', '2', '3']

0

आप बस %wमाणिक सरण में अंकन के साथ ऐसा कर सकते हैं।

array = %w(1 2 3)

यह सरणी मानों को 1,2,3 जोड़ देगा, जैसा कि आउटपुट के लिए अरंड प्रिंट आउट करता है ["1", "2", "3"]

हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.