# Can 35.times do |i| be decrement of "i"?

**URL:** <https://www.ruby-forum.com/t/can-35-times-do-i-be-decrement-of-i/177556>\
**Category:** Ruby\
**Created:** [October 20, 2009, 6:10am UTC](https://www.ruby-forum.com/t/can-35-times-do-i-be-decrement-of-i/177556 "2009-10-20T06:10:42Z")\
**Posts on this page:** 9\
**Page:** 1

<div class="post-metadata">

**Author:** ![winterheat](https://www.ruby-forum.com/letter_avatar_proxy/v4/letter/w/7993a0/32.png) [@winterheat](https://www.ruby-forum.com/u/winterheat)\
**Post date:** [October 20, 2009, 6:10am UTC](https://www.ruby-forum.com/t/can-35-times-do-i-be-decrement-of-i/177556/1 "2009-10-20T06:10:42Z")

</div>

if there is a loop

35.times do |i|  
print i

# do something here…

end

it is nice except i hope to count down the “i”…

it can be

print 35 - i

but then if the number needs to be 36 then i need to change both places.

or it can be

35.downto(1) do |i|

but doing so feel like needing to do some counting… 1 to 35 is in fact  
35 times… so that’s good

if 35.times can go decrement that would be nice too.

thanks.

---

<div class="post-metadata">

**Author:** ![winterheat](https://www.ruby-forum.com/letter_avatar_proxy/v4/letter/w/7993a0/32.png) [@winterheat](https://www.ruby-forum.com/u/winterheat)\
**Post date:** [October 20, 2009, 6:29am UTC](https://www.ruby-forum.com/t/can-35-times-do-i-be-decrement-of-i/177556/2 "2009-10-20T06:29:50Z")

</div>

Jian L. wrote:

> if 35.times can go decrement that would be nice too.
> 
> thanks.

Not sure I follow what you’re asking, or why downto is not a good  
solution? but  
you could try this:

irb(main):008:0\> count=5  
irb(main):009:0\> count.times { |n| puts count-n }  
5  
4  
3  
2  
1  
=\> 5

–  
Kind Regards,  
Rajinder Y.

[http://DevMentor.org](http://DevMentor.org)  
Do Good ~ Share Freely

---

<div class="post-metadata">

**Author:** ![winterheat](https://www.ruby-forum.com/letter_avatar_proxy/v4/letter/w/7993a0/32.png) [@winterheat](https://www.ruby-forum.com/u/winterheat)\
**Post date:** [October 20, 2009, 6:44am UTC](https://www.ruby-forum.com/t/can-35-times-do-i-be-decrement-of-i/177556/3 "2009-10-20T06:44:32Z")

</div>

Rajinder Y. wrote:

> Jian L. wrote:
> 
> > if 35.times can go decrement that would be nice too.
> > 
> > thanks.
> 
> Not sure I follow what you’re asking, or why downto is not a good  
> solution? but  
> you could try this:
> 
> irb(main):008:0\> count=5  
> irb(main):009:0\> count.times { |n| puts count-n }

1. I don’t want to create an extra variable. It is a simple loop to  
count down 35 times in a short program.

2. I want 35.times because it says it is 35 times, very clearly.  
35.downto(1) you will need to think a little how many times it is. My  
purpose is to do it 35 times, so 35.times is best, but I need the count  
down. Something like

35.times.countdown do |i|  
print i, " "

# do something

end

---

<div class="post-metadata">

**Author:** ![winterheat](https://www.ruby-forum.com/letter_avatar_proxy/v4/letter/w/7993a0/32.png) [@winterheat](https://www.ruby-forum.com/u/winterheat)\
**Post date:** [October 20, 2009, 7:03am UTC](https://www.ruby-forum.com/t/can-35-times-do-i-be-decrement-of-i/177556/4 "2009-10-20T07:03:47Z")

</div>

On Oct 20, 2009, at 12:44 AM, Jian L. wrote:

> > you could try this:  
> > purpose is to do it 35 times, so 35.times is best, but I need the

So DO IT that way. Ruby lets you!

irb\> class Integer  
def countdown  
self.downto(1){|i|yield i}  
end  
end  
=\> nil  
irb\> 35.countdown {|i| print i, ’ '}; puts “Boom!”  
35 34 33 32 31 30 29 28 27 26 25 24 23 22 21 20 19 18 17 16 15 14 13  
12 11 10 9 8 7 6 5 4 3 2 1 Boom!  
=\> nil

Happy?

-Rob

Rob B. [http://agileconsultingllc.com](http://agileconsultingllc.com)  
removed\_email\_address@domain.invalid

---

<div class="post-metadata">

**Author:** ![winterheat](https://www.ruby-forum.com/letter_avatar_proxy/v4/letter/w/7993a0/32.png) [@winterheat](https://www.ruby-forum.com/u/winterheat)\
**Post date:** [October 20, 2009, 7:14am UTC](https://www.ruby-forum.com/t/can-35-times-do-i-be-decrement-of-i/177556/5 "2009-10-20T07:14:06Z")

</div>

Rob B. wrote:

> irb\> class Integer  
> def countdown  
> self.downto(1){|i|yield i}  
> end  
> end  
> =\> nil  
> irb\> 35.countdown {|i| print i, ’ '}; puts “Boom!”  
> 35 34 33 32 31 30 29 28 27 26 25 24 23 22 21 20 19 18 17 16 15 14 13  
> 12 11 10 9 8 7 6 5 4 3 2 1 Boom!

yup, that’s similar to what i was looking for. And 35.times doesn’t  
have any mechanism to count down i guess, not like

for i = 35 to 1 step -1  
do something  
next

---

<div class="post-metadata">

**Author:** ![winterheat](https://www.ruby-forum.com/letter_avatar_proxy/v4/letter/w/7993a0/32.png) [@winterheat](https://www.ruby-forum.com/u/winterheat)\
**Post date:** [October 20, 2009, 8:06am UTC](https://www.ruby-forum.com/t/can-35-times-do-i-be-decrement-of-i/177556/6 "2009-10-20T08:06:26Z")

</div>

On Oct 20, 2009, at 1:14 AM, Jian L. wrote:

> > 12 11 10 9 8 7 6 5 4 3 2 1 Boom!

Just use Integer#step if that’s how you want to think about it:

irb\> 35.step(1,-1) {|i| print i,’ '}; puts “Ha!”  
35 34 33 32 31 30 29 28 27 26 25 24 23 22 21 20 19 18 17 16 15 14 13  
12 11 10 9 8 7 6 5 4 3 2 1 Ha!  
=\> nil

-Rob

Rob B. [http://agileconsultingllc.com](http://agileconsultingllc.com)  
removed\_email\_address@domain.invalid

---

<div class="post-metadata">

**Author:** ![winterheat](https://www.ruby-forum.com/letter_avatar_proxy/v4/letter/w/7993a0/32.png) [@winterheat](https://www.ruby-forum.com/u/winterheat)\
**Post date:** [October 20, 2009, 9:03pm UTC](https://www.ruby-forum.com/t/can-35-times-do-i-be-decrement-of-i/177556/7 "2009-10-20T21:03:06Z")

</div>

#Ruby has “reverse\_each” method.

irb(main):001:0\> RUBY\_VERSION  
=\> “1.9.1”

irb(main):002:0\> 35.times {|i| print i, " "}  
0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26  
27 28 29  
30 31 32 33 34 =\> 35

irb(main):003:0\> 35.times.reverse\_each {|i| print i, " "}  
34 33 32 31 30 29 28 27 26 25 24 23 22 21 20 19 18 17 16 15 14 13 12 11  
10 9 8 7  
6 5 4 3 2 1 0 =\> #Enumerator:0x142c840

#Note that it counts 34 down to 0 (not 35 down to 1).

---

<div class="post-metadata">

**Author:** ![winterheat](https://www.ruby-forum.com/letter_avatar_proxy/v4/letter/w/7993a0/32.png) [@winterheat](https://www.ruby-forum.com/u/winterheat)\
**Post date:** [October 20, 2009, 10:50pm UTC](https://www.ruby-forum.com/t/can-35-times-do-i-be-decrement-of-i/177556/8 "2009-10-20T22:50:32Z")

</div>

Thairuby TH wrote:

> irb(main):003:0\> 35.times.reverse\_each {|i| print i, " "}  
> 34 33 32 31 30 29 28 27 26 25 24 23 22 21 20 19 18 17 16 15 14 13 12 11  
> 10 9 8 7  
> 6 5 4 3 2 1 0 =\> #Enumerator:0x142c840
> 
> #Note that it counts 34 down to 0 (not 35 down to 1).

counting from 34 to 0 is better since it is good for rocket take off =)

---

<div class="post-metadata">

**Author:** ![winterheat](https://www.ruby-forum.com/letter_avatar_proxy/v4/letter/w/7993a0/32.png) [@winterheat](https://www.ruby-forum.com/u/winterheat)\
**Post date:** [October 20, 2009, 8:02am UTC](https://www.ruby-forum.com/t/can-35-times-do-i-be-decrement-of-i/177556/9 "2009-10-20T08:02:20Z")

</div>

On Tue, Oct 20, 2009 at 1:14 PM, Jian L. [removed\_email\_address@domain.invalid](mailto:removed_email_address@domain.invalid)  
wrote:

> for i = 35 to 1 step -1

hmm if you modify the step var, the block would not loop 35 times, wc  
you ask in your op

> do something  
> next

yours was a special case, so i was thinking something like,

> class Fixnum  
> def countdown\_by decrement = 1  
> x = self  
> x.times do |y|  
> yield(x - decrement\*y)  
> end  
> end  
> end
> 
> 5.countdown\_by {|x| puts x}  
> 5  
> 4  
> 3  
> 2  
> 1  
> =\> 5

> 5.countdown\_by(2) {|x| puts x}  
> 5  
> 3  
> 1  
> -1  
> -3  
> =\> 5

kind regards -botp
