루비 : 범위를 반복하는 방법, 설정된 단위로?


156

따라서 다음과 같이 범위를 반복합니다.

(1..100).each do |n|
    # n = 1
    # n = 2
    # n = 3
    # n = 4
    # n = 5
end

그러나 내가하고 싶은 것은 10 년대 반복입니다.

따라서 n1 씩 늘리는 대신 n실제로 10, 20, 30 등이됩니다.



@ DiegoDias 그러나 이것은 최고와 그 스레드를 가지고
잭슨 Jegatheesan

답변:


256

전체 API는 http://ruby-doc.org/core/classes/Range.html#M000695 를 참조하십시오 .

기본적으로이 step()방법 을 사용합니다 . 예를 들면 다음과 같습니다.

(10..100).step(10) do |n|
    # n = 10
    # n = 20
    # n = 30
    # ...
end

12
이 대답은 내가 찾고 있던 것으로 이끌었습니다 ... 당신이 두 번 있다면, 당신은 할 수 있습니다(time1..time2).step(15.minutes) do |time|
daybreaker

12

사용할 수 있습니다 Numeric#step.

0.step(30,5) do |num|
  puts "number is #{num}"
end
# >> number is 0
# >> number is 5
# >> number is 10
# >> number is 15
# >> number is 20
# >> number is 25
# >> number is 30

6

다음은 아마도 더 친숙한 방법입니다.

for i in (0..10).step(2) do
    puts i
end

10
죄송하지만 루비 스타일 가이드는 사용 for루프를 권장하지 않습니다 .
Darth Egregious

@DarthEgregious 왜 그렇습니까?
Doug

그것은 모든 것이 객체이고 모든 행동 이 메소드 호출 이라는 철학의 확장입니다 . 따라서로 반복하기 위해 내장 기능을 사용하는 대신 메소드를 for사용해야합니다 each.
Darth Egregious

5
rng.step(n=1) {| obj | block } => rng

rng를 반복하여 각 n 번째 요소를 블록으로 전달합니다. 범위에 숫자 또는 문자열이 포함 된 경우 자연 순서가 사용됩니다. 그렇지 않으면 단계는 succ를 호출하여 범위 요소를 반복합니다. 다음 코드는 클래스 수준 설명서에 정의 된 클래스 X를 사용합니다.

range = Xs.new(1)..Xs.new(10)
range.step(2) {|x| puts x}
range.step(3) {|x| puts x}

생산 :

1 x
3 xxx
5 xxxxx
7 xxxxxxx
9 xxxxxxxxx
1 x
4 xxxx
7 xxxxxxx
10 xxxxxxxxxx

참고: http://ruby-doc.org/core/classes/Range.html

......

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