ฉันจะทำแบบนี้สำหรับการวนซ้ำใน Ruby ได้อย่างไร?
for(int i=0; i<array.length; i++) {
}
ฉันจะทำแบบนี้สำหรับการวนซ้ำใน Ruby ได้อย่างไร?
for(int i=0; i<array.length; i++) {
}
คำตอบ:
array.each do |element|
element.do_stuff
end
หรือ
for element in array do
element.do_stuff
end
หากคุณต้องการดัชนีคุณสามารถใช้สิ่งนี้:
array.each_with_index do |element,index|
element.do_stuff(index)
end
each
เป็นเรื่องที่ดี แต่บางครั้งฉันก็แค่ต้องการแบบดั้งเดิมที่น่ากลัวสำหรับการวนซ้ำ บางครั้ง "วิถีทับทิม" อาจเป็นเรื่องน่ารำคาญ
limit = array.length;
for counter in 0..limit
--- make some actions ---
end
วิธีอื่นในการดำเนินการดังต่อไปนี้
3.times do |n|
puts n;
end
ที่จะพิมพ์ 0, 1, 2 ดังนั้นสามารถใช้เช่นตัววนซ้ำอาร์เรย์ได้เช่นกัน
คิดว่าตัวแปรนั้นเหมาะกับความต้องการของผู้เขียนมากกว่า
ฉันกดปุ่มนี้เป็นลิงก์บนสุดของ Google "Ruby for loop" อยู่เรื่อย ๆ ดังนั้นฉันจึงต้องการเพิ่มวิธีแก้ปัญหาสำหรับลูปที่ขั้นตอนไม่ได้เป็นเพียงแค่ '1' สำหรับกรณีเหล่านี้คุณสามารถใช้เมธอด 'ขั้นตอน' ที่มีอยู่ในอ็อบเจ็กต์ Numerics และ Date ฉันคิดว่านี่เป็นค่าประมาณที่ใกล้เคียงสำหรับลูป 'for'
start = Date.new(2013,06,30)
stop = Date.new(2011,06,30)
# step back in time over two years, one week at a time
start.step(stop, -7).each do |d|
puts d
end
ความเท่าเทียมกันจะเป็น
for i in (0...array.size)
end
หรือ
(0...array.size).each do |i|
end
หรือ
i = 0
while i < array.size do
array[i]
i = i + 1 # where you may freely set i to any value
end
array.each_index do |i|
...
end
ไม่ใช่ Rubyish มากนัก แต่เป็นวิธีที่ดีที่สุดในการวนซ้ำจากคำถามใน Ruby
each
each_index
+1
หากต้องการวนซ้ำตามจำนวนครั้งที่กำหนดให้ลอง:
n.times do
#Something to be done n times
end
หากคุณไม่จำเป็นต้องเข้าถึงอาร์เรย์ของคุณ (ง่ายๆสำหรับการวนซ้ำ) คุณสามารถใช้ไม่เกินหรือแต่ละอัน:
จนถึง:
1.9.3p392 :030 > 2.upto(4) {|i| puts i}
2
3
4
=> 2
แต่ละ:
1.9.3p392 :031 > (2..4).each {|i| puts i}
2
3
4
=> 2..4
อะไร? ตั้งแต่ปี 2010 และไม่มีใครพูดถึง Ruby ว่ามีค่าปรับสำหรับ / ในวง (ไม่มีใครใช้):
ar = [1,2,3,4,5,6]
for item in ar
puts item
end
['foo', 'bar', 'baz'].each_with_index {|j, i| puts "#{i} #{j}"}
ไวยากรณ์การแจงนับของรูบี้แตกต่างกัน:
collection.each do |item|
...
end
สิ่งนี้อ่านว่า "การเรียกไปยังเมธอด 'each' ของอินสแตนซ์อ็อบเจ็กต์อาร์เรย์ที่ใช้บล็อกโดยมี 'blockargument' เป็นอาร์กิวเมนต์" ไวยากรณ์ของบล็อกใน Ruby คือ 'do ... end' หรือ '{... }' สำหรับคำสั่งบรรทัดเดียว
อาร์กิวเมนต์บล็อก '| item |' เป็นทางเลือก แต่ถ้าระบุไว้อาร์กิวเมนต์แรกจะแทนรายการที่แจกแจงแบบวนซ้ำโดยอัตโนมัติ