ฉันเริ่มต้นอาร์เรย์ด้วยวิธีนี้:
array = Array.new
array << '1' << '2' << '3'
เป็นไปได้ไหมที่จะทำในขั้นตอนเดียว? ถ้าเป็นอย่างไร
ฉันเริ่มต้นอาร์เรย์ด้วยวิธีนี้:
array = Array.new
array << '1' << '2' << '3'
เป็นไปได้ไหมที่จะทำในขั้นตอนเดียว? ถ้าเป็นอย่างไร
array = Array.new << 1 << 2 << 3
;)
1
เป็น'1'
.
คำตอบ:
คุณสามารถใช้ตัวอักษรอาร์เรย์:
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 }
สุดท้ายแม้ว่าจะไม่ได้สร้างอาร์เรย์ของสามสตริงเหมือนคำตอบอื่น ๆ ข้างต้น แต่โปรดทราบว่าคุณสามารถใช้ตัวนับใน Ruby 1.8.7+ เพื่อสร้างอาร์เรย์ได้ ตัวอย่างเช่น:
array = 1.step(17,3).to_a
#=> [1, 4, 7, 10, 13, 16]
to_a
( [*'1'..'3']
)
Array[ "1","2","3"] #=> ["1","2","3"]
(ฉันไม่คิดว่าวิธีนี้เกี่ยวข้องกับตัวสร้างลิเทอรัลอาร์เรย์) คุณยังสามารถใช้ Kernel # Array ระดับบนสุด (ชื่อเมธอดดูเหมือนชื่อคลาส)Array(1..5) #=> [1,2,3,4,5]
หนึ่งในสายการบิน:
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']
[1,2,3]
การเริ่มต้นเพียงครั้งเดียว นอกจากนี้คุณยังมีตัวละครมากขึ้น นอกจากนี้คุณได้สร้างอาร์เรย์ของ Fixnums ในขณะที่ OP กำลังถามเกี่ยวกับอาร์เรย์ของสตริง
นอกจากคำตอบข้างต้นแล้วคุณก็ทำได้เช่นกัน
=> [*'1'.."5"] #remember *
=> ["1", "2", "3", "4", "5"]
>> [*?1..?5] #=> ["1", "2", "3", "4", "5"]
คุณยังสามารถทำมันได้ด้วยวิธีนี้:
เพื่อพิสูจน์ว่ามีวิธีทำมากกว่าหนึ่งหกวิธี:
plus_1 = 1.method(:+)
Array.new(3, &plus_1) # => [1, 2, 3]
หากไม่สามารถ 1.method (: +) ได้คุณสามารถทำได้เช่นกัน
plus_1 = Proc.new {|n| n + 1}
Array.new(3, &plus_1) # => [1, 2, 3]
แน่นอนว่ามันเกินความจำเป็นในสถานการณ์นี้ แต่ถ้าplus_1
เป็นนิพจน์ที่ยาวมากคุณอาจต้องการวางไว้ในบรรทัดแยกต่างหากจากการสร้างอาร์เรย์
คุณทำได้
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
ซึ่งไม่ใช่สิ่งที่เราต้องการที่นี่
หวังว่านี่จะช่วยชี้แจงประเด็น!
ในการสร้างอาร์เรย์ดังกล่าวคุณสามารถทำได้:
array = ['1', '2', '3']
หากคุณมีอาร์เรย์ของสตริงคุณสามารถเริ่มต้นได้เช่นนี้:
array = %w{1 2 3}
เพียงแค่แยกแต่ละองค์ประกอบด้วยช่องว่างใด ๆ
คุณสามารถเริ่มต้นอาร์เรย์ได้ในขั้นตอนเดียวโดยเขียนองค์ประกอบ[]
ดังนี้:
array = ['1', '2', '3']
คุณสามารถทำได้โดยใช้%w
สัญกรณ์ในอาร์เรย์ทับทิม
array = %w(1 2 3)
มันจะเพิ่มค่าอาร์เรย์ 1,2,3 ให้กับอาร์เรย์และพิมพ์ผลลัพธ์เป็น ["1", "2", "3"]