루비의 for 루프 구문


87

Ruby에서 이러한 유형의 for 루프를 어떻게 수행합니까?

for(int i=0; i<array.length; i++) {

}

@johannes 책을 읽는 것은 좋은 생각이지만 Ruby 1.6에 대해서는 바람직하지 않습니다!
Andrew Grimm

ruby-doc : Enumerable module 에서 몇 가지 유용한 메소드를 살펴 보는 것을 잊지 마십시오 .
Ivan Chau

답변:


118
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

15
나는 특히 루프에서 인덱싱을 찾고 있었지만 이러한 솔루션 중 어느 것도 그렇게하는 방법을 즉시 명확하게 만들지 못했습니다. 작전은 코드에서 array.length로 그의 의도를 배신했습니다 ...
jheriko

6
내 대답을주의 깊게 읽으십시오. 인덱싱이 포함 된 루핑 솔루션이 있습니다.
Eimantas 2013

8
종종 each훌륭합니다. 하지만 가끔은 망할 전통적인 for 루프를 원합니다. 때때로 "Ruby way"는 그냥 짜증나게 할 수 있습니다.
Ruben Martinez Jr.

1
내가 나 자신을 일종의를 작성할 수 있도록 내가 어떻게 수동으로 루비에 인덱스를 설정하는
무하마드 Umer

6
다음 두 번의 반복을 건너 뛰려면 어떻게해야
하나요

77
limit = array.length;
for counter in 0..limit
 --- make some actions ---
end

다른 방법은 다음과 같습니다.

3.times do |n|
  puts n;
end

0, 1, 2를 인쇄하므로 배열 반복자처럼 사용할 수도 있습니다.

저자의 요구에 더 적합한 변형을 생각하십시오.


29

나는 이것을 구글 "루비를위한 루비"에 대한 상위 링크로 계속 누르기 때문에 단계가 단순히 '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

20

동등성은

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

17
array.each_index do |i|
  ...
end

Rubyish는 아니지만 Ruby의 질문에서 for 루프를 수행하는 가장 좋은 방법입니다.


이것은 훌륭합니다. 대답이 each아니라 오히려 사실입니다 each_index. +1
Dan Rosenstark 2011 년

12

고정 된 횟수만큼 루프를 반복하려면 다음을 시도하십시오.

n.times do
  #Something to be done n times
end

10

배열에 액세스 할 필요가없는 경우 (단순한 for 루프) upto 또는 each를 사용할 수 있습니다 .

까지:

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 

8

뭐? 2010 년부터 루비는 / in 루프에 대해 괜찮다고 언급하지 않았습니다 (아무도 사용하지 않습니다).

ar = [1,2,3,4,5,6]
for item in ar
  puts item
end

5
.each ... do 의 한 가지 장점은 블록 임시가 루프 끝에서 범위를 벗어난 반면 for ... in 은 임시 범위를 벗어난다는 것입니다.
Wayne Conrad

4
['foo', 'bar', 'baz'].each_with_index {|j, i| puts "#{i} #{j}"}

0

Ruby의 열거 형 루프 구문은 다릅니다.

collection.each do |item|
...
end

이것은 "인수로 'blockargument'를 사용하여 블록을 취하는 배열 개체 인스턴스 '컬렉션'의 '각'메서드에 대한 호출"으로 읽습니다. Ruby의 블록 구문은 단일 행 명령문의 경우 'do ... end'또는 '{...}'입니다.

블록 인수 '| item |' 선택 사항이지만 제공되는 경우 첫 번째 인수는 반복 된 열거 항목을 자동으로 나타냅니다.

당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.